问题:
给定一个字符串列表,找到子字符串,如果从它匹配的所有字符串的开头减去它并用转义字节替换,则得到最短的总长度。
例子:
"foo"
, "fool"
,"bar"
结果是: "foo" 作为带有字符串 、 和总长度为 9 个字节的"\0"
基本"\0l"
字符串"bar"
。"\0"
是转义字节。原始字符串的长度之和是 10,所以在这种情况下我们只保存了一个字节。
一个朴素的算法看起来像:
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),太贵了。