이 질문은 밀접하게 관련이 있습니다 another stackoverflow question. 질문에 대한 매우 효율적인 해결책을 찾고 있습니다. 접미사 배열을 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;
}
어떻게 개선 할 수 있습니까? 문제는 여기에 표명하는
편집
:
두 문자열 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