【发布时间】:2016-02-09 23:35:39
【问题描述】:
我正在尝试解决hackerrank 上的this 问题:
所以问题是:
杰克和丹尼尔是朋友。他们都喜欢字母,尤其是大写字母。 他们正在从报纸上剪下大写字母,每个人都将自己的字母集存放在不同的堆栈中。 美好的一天,摩根拜访了杰克和丹尼尔。他看到了他们的收藏。摩根想知道由这两个集合组成的字典上最小的字符串是什么。当它在堆栈的顶部时,他可以从集合中取出一封信。 此外,Morgan 想使用男孩收藏中的所有字母。
这是我在 Perl 中的尝试:
#!/usr/bin/perl
use strict;
use warnings;
chomp(my $n=<>);
while($n>0){
chomp(my $string1=<>);
chomp(my $string2=<>);
lexi($string1,$string2);
$n--;
}
sub lexi{
my($str1,$str2)=@_;
my @str1=split(//,$str1);
my @str2=split(//,$str2);
my $final_string="";
while(@str2 && @str1){
my $st2=$str2[0];
my $st1=$str1[0];
if($st1 le $st2){
$final_string.=$st1;
shift @str1;
}
else{
$final_string.=$st2;
shift @str2;
}
}
if(@str1){
$final_string=$final_string.join('',@str1);
}
else{
$final_string=$final_string.join('',@str2);
}
print $final_string,"\n";
}
示例输入:
2
JACK
DANIEL
ABACABA
ABACABA
第一行包含测试用例的数量,T。 接下来的每两行都有这样的格式:第一行包含字符串 A,第二行包含字符串 B。
样本输出:
DAJACKNIEL
AABABACABACABA
但是对于 示例测试用例,它给出了 正确的结果,而对于 其他测试用例给出了错误的结果 /em>。它给出错误结果的一种情况是
1
AABAC
AACAB
它输出AAAABACCAB 而不是AAAABACABC。
我不知道算法出了什么问题,为什么它在其他测试用例中失败了?
更新:
根据@squeamishossifrage cmets 如果我添加
($str1,$str2)=sort{$a cmp $b}($str1,$str2);
无论用户输入如何,结果都相同,但测试用例仍然失败。
【问题讨论】:
-
最好包含您要解决的问题的摘要 - 否则您的答案依赖于该链接,如果它消失了,这是个坏消息。
-
@Sobrique 添加了摘要和输入/输出。
-
我没有时间找出问题所在,但是很容易找到代码失败的测试用例。例如,字符串
AABAC和AACAB会根据它们出现的顺序给出不同的结果。 -
我不懂 Perl。您是比较整个剩余字符串还是仅比较当前字符?你绝对应该做前者。
-
@squeamishossifrage 当字符串中的两个字符相等时它会失败并且 它失败是因为它会根据用户输入从不同的字符串中删除字符,我不确定如果我应该从哪个字符串中删除字符他们是平等的