Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 将这些字符串转换为字谜所需的最小字符删除数(两者)?_Perl_Hash - Fatal编程技术网

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

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))

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

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)) {
    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能够澄清。