package codingInterviewGuide.part4dp;/**最长公共子串,得用dp去做* Created by Dell on 2017年08月10日.*/public class LongestSubstring {public int findLongest2(String A, int n, String B, int m) {int[][] dp=new int[n+1][m+1];char[] a=A.toCharArray();char[] b=B.toCharArray();int len=-1;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(a[i]==b[j]){dp[i+1][j+1]=dp[i][j]+1;len=Math.max(len,dp[i+1][j+1]);}}}return len;}public int findLongest(String A, int n, String B, int m) {// int[][] dp=new int[n+1][m+1];char[] a=A.toCharArray();char[] b=B.toCharArray();int len=0,cura=0,curb=0,curlen=0;//按照斜线计算,可将空间压缩至O(1)//将矩阵上半区统计for(int j=0;j<m+n;j++){if(j<n){cura=j;curb=0;}else{cura=0;curb=j-n;}curlen=0;while(cura<n&&curb<m){//从a串第一个字符开始比较,直至其中一个字符超出if(a[cura]==b[curb]){curlen+=1;len=Math.max(len,curlen);}else{curlen=0;}cura++;curb++;}}return len;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。