指定された入力文字列について、input = "abbbbdeeefffddddb"
それを解析したい
result = ['a', 'b', 'bb', 'bd', 'd', 'e', 'ee', 'f', 'ff', 'dd', 'db']
この解析の背後にあるロジックは次のとおりです。部分文字列が初めて検出された場合、それは解析されて取り除かれます。部分文字列が出現するたびに、次の文字と連結されて解析されます。
説明する:
- 「a」(位置 0) を見たことがありますか? いいえ 解析します。
- "b" (位置 1) を見たことがありますか? いいえ 解析します。
- 「b」(位置 2) を見たことがありますか? はい; 次の文字とマージ
- 「bb」(ポジション 2 と 3)を見たことがありますか?いいえ 解析します。
- 「b」(位置 4) を見たことがありますか? はい 次の文字とマージします
- 「bd」(位置 4 & 5) を見たことがありますか? いいえ 解析します...
これは最後まで続きます。
私は次のコードでこれを達成しようとしました:
input = "abbbbdeeefffddddb"
comparator = []
def parse(string):
for pointer in range(len(string)-1):
if string[pointer] not in comparator:
comparator.append(string[pointer])
else:
substring = string[pointer] + string[pointer+1]
comparator.append(substring)
print comparator
parse(input)
結果は次のとおりです。['a', 'b', 'bb', 'bb', 'bd', 'd', 'e', 'ee', 'ef', 'f', 'ff', 'fd', 'dd', 'dd', 'dd', 'db']
そして、それは間違っています。ここには重要な部分がありませんが、実装方法がわかりません。再帰関数が必要になるか、どこかでbreak
orを使用する必要があります。continue
この特定の入力に対してのみソリューションを提供しないでください。ここに示す入力は、例のためのものです。ソリューションは、さまざまな入力にも適用できるように一般的でなければなりません。
元のアルゴリズムは次のとおりです。6 ページ:論文