相似度算法(二)-------最大公共字符串
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]
相关文章推荐
- 字符串相关算法(编辑距离,最大公共字串)C#实现版
- 两个或N个字符串最大公共子串算法
- 两个或N个字符串最大公共子串算法
- LCS算法寻找字符串最大公共子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 两个或N个字符串最大公共子串算法
- 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 两个或N个字符串最大公共子串算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 经典字符串算法 “最长上升子序列,最大连续子序列和,最长公共子串”
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 转【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS)&字符串相似度算法
- 算法题-两个字符串的最大公共子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 面试的算法1(C语言)(整理)(组合数 字符串倒置 最大公共串)
- 找工作知识储备---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 【动态规划】LCS算法:求两字符串最大公共字符串(连续)
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串