最长公共子串算法的学习笔记
2011-04-16 20:01 Aga.J 阅读(446) 评论(0) 编辑 收藏 举报Longest Common Subsequence
最长公共子串
算法原理:
1 将两个字符串分别以行和列组成矩阵
2 计算每个节点的行和列的字符是否相同,如果相同则为1
3 通过找出值为1的最长对角线就可以得到最长公共子串
(在第3步中可以这样优化算法,就是把相同字符所在的位置的值加上左上角d[i-1][j-1]的值,这样就可以获得最长公共子串的长度,更可以得到公共子串是什么)
这个算法的原理很浅显易懂,很快理解为什么可以这样做,所以这里就不赘述了。直接贴出来自网络的参考代码。
public static string LCS(string s1,string s2)
{
if(s1==s2)
return s1;
else if (String.IsNullOrEmpty(s1) || String.IsNullOrEmpty(s1))
return null;
var d = new int[s1.Length, s2.Length];
var index=0;
var length=0;
for( int i =0;i<s1.Length;i++)
for(int j=0;j<s2.Length;j++)
{
var n= (i-1>=0 && j-1>=0 )?d[i-1,j-1]:0 ;
d[i,j]= s1[i]==s2[j]?1+n:0;
if(d[i,j]>length)
{
length=d[i,j];
index=i;
}
}
return s1.Substring(index-length+1,length);
}
作者:Aga.J
出处:http://www.cnblogs.com/aga-j
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
个人学习笔记仅供本人记录知识所用,不属发表性文章。