Megpróbálom megoldani ezt a problémát a hackerranken :
Tehát a probléma:
Jack és Daniel barátok. Mindketten szeretik a betűket, különösen a nagybetűket. Nagybetűket vágnak ki újságokból, és mindegyiküknek külön kötegben van a betűgyűjteménye. Egy szép napon Morgan meglátogatta Jacket és Danielt. Látta a gyűjteményeiket. Morgan kíváncsi volt, mi az a lexikográfiailag minimális zsinór, amely ebből a két gyűjteményből áll. El tud venni egy levelet egy gyűjteményből, ha az a verem tetején van. Ezenkívül Morgan a fiúk gyűjteményében lévő összes betűt fel akarja használni.
Ez a próbálkozásom Perlben:
#!/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";
}
Mintabevitel:
2
JACK
DANIEL
ABACABA
ABACABA
Az első sor a tesztesetek számát tartalmazza, T. Minden következő két sor ilyen formátumú: az első sorban az A karakterlánc, a másodikban a B karakterlánc található.
Minta kimenet:
DAJACKNIEL
AABABACABACABA
De a teszteset minta esetében megfelelő eredményeket ad, míg rossz eredményeket egyéb teszteseteknél . Az egyik olyan eset, amelynél helytelen eredményt ad
1
AABAC
AACAB
AAAABACABC
helyett AAAABACCAB
-t ad ki.
Nem tudom, mi a baj az algoritmussal, és miért nem működik más teszteseteknél?
Frissítés:
@squeamishossifrage megjegyzések szerint Ha hozzáteszem
($str1,$str2)=sort{$a cmp $b}($str1,$str2);
Az eredmények a felhasználói beviteltől függetlenül ugyanazok, de a teszteset továbbra is sikertelen.
smaller string lexicographically
. 09.11.2015