转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981
最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结了这篇博客内容:求两个字符串的最大公共子串。
算法思想:基于图计算两字符串的公共子串。具体算法思想参照下图:
输入字符串S1:achmacmh 输入字符串S2:macham
1)第a步,是将字符串s1,s2分别按字节拆分,构成一个二维数组;
2)二维数组中的值如b所示,比如第一行第一列的值表示字符串s2和s1的第一个字节是否相等,若相等就是1,否则就是0,最终产生b所示的二维数组;
3)分别求二维数组中斜线上的公共因子(斜线为元素a右下角值,即a[i][j]的下一个元素是a[i+1][j+1];公共因子为1所在的位置构成的字符串);
4)对所有公共因子排序,返回最大的公共因子的值。
具体的实现代码如下所示:
package cn.lulei.compare;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Compara