给出了两个字符串,将这些字符串转换为字谜所需的最少字符删除次数(两者)。 约束:需要使用单个哈希
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')。 有什么建议吗?
答案 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;