如何在字符串中找到第一个非重复字符?

时间:2010-03-30 20:48:55

标签: string function perl

我需要编写一个返回字符串中第一个非重复字符的函数。示例:"Thanks for visiting"返回"h"

3 个答案:

答案 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;
    }
}