問題:
文字列のリストを指定して、一致するすべての文字列の先頭から減算され、エスケープバイトに置き換えられた場合に、最短の全長を与える部分文字列を見つけます。
例:
"foo"
、、"fool"
_"bar"
結果は次のようになります。文字列"\0"
、、、および全長が9バイトのベース文字列としての「foo」 。エスケープバイトです。元の文字列の長さの合計は10であるため、この場合は1バイトしか保存しませんでした。"\0l"
"bar"
"\0"
単純なアルゴリズムは次のようになります。
for string in list
for i = 1, i < length of string
calculate total length based on prefix of string[0..i]
if better than last best, save it
return the best prefix
それで答えはわかりますが、O((n * m)^ 2)のようなもので、高すぎます。