我熟悉用于2个字符串的LCS算法。现在想要找到在2个或者N个字符串中的公共子串,每一对字符串中可能有多个公共子串,在这些字符串的子集中也可能有不同的公共子串。
字符串:(ABCDEFGHIJKL) (DEF) (ABCDEF) (BIJKL) (FGH)
公共子串:
1/2 (DEF)
1/3 (ABCDEF)
1/4 (IJKL)
1/5 (FGH)
2/3 (DEF)
最长公共字符串:
1/3 (ABCDEF)
最常见的字符串:
1/2/3 (DEF)
我熟悉用于2个字符串的LCS算法。现在想要找到在2个或者N个字符串中的公共子串,每一对字符串中可能有多个公共子串,在这些字符串的子集中也可能有不同的公共子串。
字符串:(ABCDEFGHIJKL) (DEF) (ABCDEF) (BIJKL) (FGH)
公共子串:
1/2 (DEF)
1/3 (ABCDEF)
1/4 (IJKL)
1/5 (FGH)
2/3 (DEF)
最长公共字符串:
1/3 (ABCDEF)
最常见的字符串:
1/2/3 (DEF)
除非您的字符串非常大,使内存成为问题,否则后缀树是最好的选择。对于良好的实现,每个字符在字符串中的内存使用量预计为10〜30字节。还有一些开源的实现,可以让您的工作更加轻松。
还有其他更简洁的算法,但它们更难实现(查找“压缩后缀树”)。