我需要编写一个返回字符串中第一个非重复字符的函数。示例:"Thanks for visiting"
返回"h"
。
答案 0 :(得分:2)
您可以对字符串中的字符进行传递,并在散列中为每个字符(不区分大小写)存储计数。然后进行另一次传递并返回计数为1的第一个字符:
sub get_char {
my ($string) = @_;
my @chars = split //, $string;
my %chars;
++$chars{ lc() } for @chars;
for (@chars) {
return $_ if $chars{ lc() } && $chars{ lc() } == 1;
}
}
此方法需要O(n)
时间和O(n)
额外空间。
答案 1 :(得分:1)
sub {
# This assumes non-repeating means consecutive-repeating.
# non-consecutive-repeating is too boring to answer
my $string_copy = $_[0];
$string_copy =~ s/(.)(\1)+//g;
return substr($string_copy ,0, 1)
}
答案 2 :(得分:0)
使用substr()
和index()
:
sub get_it {
my $string = shift;
for my $i ( 0 .. length($string) - 1 ) {
my $char = substr $string, $i, 1;
return $char if index( $string, $char, $i + 1 ) >= 0;
}
}