将这些字符串转换为字谜所需的最少字符删除次数(两者)?

时间:2015-07-10 14:46:50

标签: perl hash

给出了两个字符串,将这些字符串转换为字谜所需的最少字符删除次数(两者)。 约束:需要使用单个哈希

aaabbc abc

输出 - 3(2 a和1 b)

我能够使用两个哈希实现此目的,并使用一个哈希尝试以下解决方案 -

my $str1 = 'aaabbc';
my $str2 = 'abc';

my %h;

map{$h{$_}++} sort(//,$str1);
map{$h{$_}++} sort(//,$str2);

my $c = 0;

foreach (keys(%h)) {
    if($h{$_} == 1) {
        $c++;
    }
}

print "$c\n";

在很多情况下它会失败('xxx','yyy')。 有什么建议吗?

1 个答案:

答案 0 :(得分:4)

使用单个哈希(闻起来像家庭作业)增加第一个字符串中字符的计数,并减少第二个字符串中字符的计数。相同数字的相同数字将被取消。保留的任何非零值都是差值的大小,因此在计算差异总数时请取绝对值。

my $str1 = 'aaabbc';
my $str2 = 'abc';
my %h;
my $c;

$h{$_}++ foreach split //, $str1;
$h{$_}-- foreach split //, $str2;

$c += abs($_) foreach values %h;

print $c;