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

算法思想

求字符串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(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值