Perl 将这些字符串转换为字谜所需的最小字符删除数(两者)?
给出了两个字符串,将这些字符串转换为字谜所需的最少字符删除次数(两者)。 约束:需要使用单个散列 aaabbcabc 输出-3(2 a和1 b) 我能够使用两个散列来实现这一点,并尝试使用一个散列来实现下面的解决方案-Perl 将这些字符串转换为字谜所需的最小字符删除数(两者)?,perl,hash,Perl,Hash,给出了两个字符串,将这些字符串转换为字谜所需的最少字符删除次数(两者)。 约束:需要使用单个散列 aaabbcabc 输出-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))
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')。
有什么建议吗?使用单个散列(闻起来像家庭作业)增加第一个字符串中字符的计数,减少第二个字符串中字符的计数。相同字符的相同数字将抵消掉。剩余的任何非零值都是差值的大小,因此在计算差值总数时取绝对值
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;
要使用单个散列(闻起来像家庭作业),请增加第一个字符串中字符的计数,并减少第二个字符串中字符的计数。相同字符的相同数字将抵消掉。剩余的任何非零值都是差值的大小,因此在计算差值总数时取绝对值
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;
我认为
map
最好写为for
循环。如果你没有分配<代码> MAP>代码>的结果,你使用的工具是错误的。删除是在开始还是结束还是在中间发生?你的代码中也存在语法错误。您缺少一个代码>。您不应该在问题中编写代码,而应该实际复制并粘贴您测试过的真实代码。感谢simbabque,我已经修复了代码并添加了分号。Sobrique,用于计算字符数的map。不过,为了清晰起见,我同意您使用to for循环的建议。关于使用单个散列的解决方案,您能想到什么吗?我认为map
最好写为for
循环。如果你没有分配<代码> MAP>代码>的结果,你使用的工具是错误的。删除是在开始还是结束还是在中间发生?你的代码中也存在语法错误。您缺少一个代码>。您不应该在问题中编写代码,而应该实际复制并粘贴您测试过的真实代码。感谢simbabque,我已经修复了代码并添加了分号。Sobrique,用于计算字符数的map。不过,为了清晰起见,我同意您使用to for循环的建议。你能想到使用单个散列的解决方案吗?如果你使用fooo
和bar
,这个解决方案就会失效。在这种情况下,你需要检查绝对值是否与长度之和相同。Michael Carman,谢谢你的工作,但你闻起来完全错了。我有两种解决方案,但尝试了这种方法。我无法用第三种方法实现,所以我征求了建议。@simbabque:你对这个问题的解释似乎与我不同。我把它理解为一种忽略顺序的Levenshtein编辑距离。考虑到这种解释,我希望fooo
和bar
会产生7,这是真的。如果我的解释是错误的,希望@CodeQuestor会澄清。如果你做fooo
和bar
,这将被打破。在这种情况下,你需要检查绝对值是否与长度之和相同。Michael Carman,谢谢你的工作,但你闻起来完全错了。我有两种解决方案,但尝试了这种方法。我无法用第三种方法实现,所以我征求了建议。@simbabque:你对这个问题的解释似乎与我不同。我把它理解为一种忽略顺序的Levenshtein编辑距离。考虑到这种解释,我希望fooo
和bar
会产生7,这是真的。如果我的解释是错误的,希望@CodeQuestor能够澄清。