这里介绍的是求最大公共连续子串的算法,至于非连续的子串问题,可以采用动态规划的方法,具体可参考:
http://blog.csdn.net/v_july_v/article/details/6695482
这里就不在详述。
求最大公共连续子串的思路如下:
用矩阵记录两个字符串所有字符的对比结果,如果某两个字符相同,那么就将矩阵相应位置的值修改为:该位置左上位置值 + 1。
例如,两个字符串 21232523311324 和 312123223445 的矩阵对比结果如下:
0 0 1 0 1 0 1 1 0 0 0 0
0 1 0 2 0 0 0 0 0 0 0 0
0 0 2 0 3 0 1 1 0 0 0 0
1 0 0 0 0 4 0 0 2 0 0 0
0 0 1 0 1 0 5 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 1 0 1 1 0 0 0 0
1 0 0 0 0 2 0 0 2 0 0 0
1 0 0 0 0 1 0 0 1 0 0 0
0 2 0 1 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 1 0 0 1 0 0 0
0 0 1 0 1 0 2 1 0 0 0 0