您的位置:首页 > 其它

相似度算法(二)-------最大公共字符串

2008-08-26 16:43 337 查看


算法思想

求字符串str1,str2的最长公共子串的长度。

定义二元函数函数f(m,n):分别以str1[m],str2
结尾的连续公共子串的长度
而对于f(m+1,n+1) 有以下两种情况
1.str1[m+1] != str2[n+1],则有f(m+1,n+1) =0
2.str1[m+1] == str2[n+1],则有f(m+1,n+1) = f(m,n) + 1
另外f(0,j) = 0(j>=0)
f(j,0) = 0 (j>=0)
按照上面这个公式,我们用容易写出这个算法的实现

[b]算法实现


public int getLCSLength(String str1,String str2){

int max=0;

int[][] matrix = new int[str1.length()+1][str2.length()+1];

for (int i = 0; i < str1.length()+1; i++) {

matrix[i][0] = 0;

}

for (int j = 0; j < str2.length()+1; j++) {

matrix[0][j] = 0;

}

for (int i=1; i < str1.length()+1; i++) {

for (int j=1; j < str2.length()+1; j++) {

if(str1.charAt(i-1)==str2.charAt(j-1)){

matrix[i][j]=matrix[i-1][j-1]+1;

max=max>matrix[i][j]?max:matrix[i][j];

}else{

matrix[i][j]=0;

}

}

}

display(matrix);

return max;

}





private void display(int[][] it) {

for (int[] i : it) {

for (int j : i) {

System.out.print(j + " ");

}

System.out.println();

}

}

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐