以下のように組み立てられた問題のパズルの場合
2 つの文字列 A と B について、文字列の類似性を、両方の文字列に共通する最長のプレフィックスの長さと定義します。たとえば、文字列 "abc" と "abd" の類似度は 2 ですが、文字列 "aaa" と "aaab" の類似度は 3 です。文字列 S とその接尾辞のそれぞれの類似度の合計を計算します。
次のソリューションを作成しましたが、3 つのテスト ケースしかパスできませんが、失敗するテスト ケースを特定できません。失敗するシナリオを特定するのを手伝ってくれませんか。
入力例: 2 ababaa aa
サンプル出力: 11 3
説明: 最初のケースでは、ストリングのサフィックスは「ababaa」、「babaa」、「abaa」、「baa」、「aa」、および「a」です。これらの各文字列と文字列 "ababaa" との類似度は、それぞれ 6,0,3,0,1,1 です。したがって、答えは 6 + 0 + 3 + 0 + 1 + 1 = 11 です。
2 番目のケースの場合、答えは 2 + 1 = 3 です。
def find_suffix(string):
if len(string) == 0:
return 0
tail = 0
head = 1
occurences = [1]
while head < len(string):
if string[head] == string[tail]:
occured = occurences[tail] + 1
tail = tail + 1
else:
if string[0] == string[head]:
occured = 2
tail = 1
else:
occured = 1
tail = 0
occurences.append(occured)
head = head + 1
return sum(occurences)