求出两个字符串的最长公共子串

来源:互联网 发布:java 流媒体 编辑:程序博客网 时间:2024/05/22 17:44

这道题要用到suffix-tree的概念,可能还需要用到动态规划(英文可能叫Dynamic Programming),现在突然有事情要做,之后一定补上。

下面是wiki的解释:

http://en.wikipedia.org/wiki/Longest_common_substring_problem

 

终于研究出来了,原来两个字符串的公共子串是不需要suffix-tree,只需要动态规划,以下是算法

 
据说原理是KMP算法的思想,具体的算法是找出短的那个,相应这个短的数组定义一个int数组,然后正循环长数组,逆循环短数组,一旦碰到一样的,就把c[j]赋值成c[j-1]+1,这样的话就表示前面已经有N个元素相等了。

最后把目前最长的长度以及index找出来,用来最后输出用。