算法思想
求字符串str1,str2的最长公共子串的长度。
定义二元函数函数f(m,n):分别以str1[m],str2[n]结尾的连续公共子串的长度
而对于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)
按照上面这个公式,我们用容易写出这个算法的实现
算法实现
publicintgetLCSLength(Stringstr1,Stringstr2){ intmax=0; int[][]matrix=newint[str1.length()+1][str2.length()+1]; for(inti=0;i<str1.length()+1;i++){ matrix[i][0]=0; } for(intj=0;j<str2.length()+1;j++){ matrix[0][j]=0; } for(inti=1;i<str1.length()+1;i++){ for(intj=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); returnmax; } privatevoiddisplay(int[][]it){ for(int[]i:it){ for(intj:i){ System.out.print(j+""); } System.out.println(); } }