この質問は、another stackoverflow questionと密接に関連しています。質問に非常に効率的な解決策を探して、そこに尋ねた。接尾辞配列はperlで実装されていますか?perlのサフィックス配列?
ここは私の現在のperlでの解決方法です。
chomp(my $ipstr = <>);
my @bigstrchars = split(//, $ipstr);
my $length = (length $ipstr);
my $sum = 0;
my $span = 1;
my $flag = 0;
while ($span < $length) {
for ($j=0; $j+$span<$length; $j++) {
if ($bigstrchars[$j] eq $bigstrchars[$j+$span]) {
$sum++;
}
else {
last;
}
}
if ($span == 1 && $sum == ($length-1)) {
$sum = $length * ($length+1) * 0.5;
$flag = 1;
last;
}
$span++;
}
unless ($flag) {
$sum += $length;
}
これをどのように改善できますか?ここでの問題を述べ
EDIT
:二つの文字列AとBのために
は、我々は両方の文字列に共通する最長のプレフィックスの長さであることを文字列の類似性を定義します。例えば、文字列 "abc"と "abd"の類似度は2であり、文字列 "aaa"と "aaab"の類似度は3です。
問題は、類似性の合計を計算するアルゴリズムを与えることです。それぞれに接尾辞が付いた文字列Sです。たとえば、文字列をababaaとします。次に、文字列の接尾辞は、ababaa、babaa、abaa、baa、aaおよびaです。これらの文字列と文字列ababaaの類似点は、それぞれ6,0,3,0,1,1です。したがって、答えは6 + 0 + 3 + 0 + 1 + 1 = 11
問題を説明できるか – justintime