我熟悉2个字符串的LCS算法。寻找有关在2..N字符串中查找常见子字符串的建议。每对中可能有多个公共子字符串。字符串子集中可以有不同的公共子字符串。
字符串: (ABCDEFGHIJKL) (DEF) (ABCDEF) (BIJKL) (FGH)
(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)
这种事情在DNA序列分析中一直都在做。您可以找到各种算法。这里列出了一个合理的集合。
还有一种蛮力的方法来制作 每个 子字符串的表(如果您只对短的子字符串感兴趣):在每个级别上形成一个N元树(N = 26表示字母,256表示ASCII),并存储直方图每个节点的计数。如果修剪掉很少使用的节点(以保持合理的内存要求),最终会得到一种算法,该算法以N * M ^ 2 * log(M)的时间来查找长度最大为M的所有子序列,以输入长度N.如果您将其拆分为K个单独的字符串,则可以构建树结构,并且只需遍历树就可以读出答案。