問題:
文字列のリストを指定して、一致するすべての文字列の先頭から減算され、エスケープバイトに置き換えられた場合に、最短の全長を与える部分文字列を見つけます。
例:
"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)のようなもので、高すぎます。