国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

LintCode之最長公共子串(Longest Common Substring)

2019-11-08 02:18:00
字體:
來源:轉載
供稿:網友

1、 首先區別最長公共子串和最長公共子序列 找兩個字符串的最長公共子串,這個子串要求在原字符串中是連續的。而最長公共子序列則并不要求連續。 2、 最長公共子串 其實這是一個序貫決策問題,可以用動態規劃來求解。使用一個二維矩陣來記錄中間結果。 eg: abcd和bca

a b c d
b 0 1 0 0
c 0 0 2 0
a 1 0 0 0

不多說,上代碼

public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common substring. */ public int longestCommonSubstring(String A, String B) { // write your code here int max=0;//記錄最長子串的大小 char[] AStr=A.toCharArray(); char[] BStr=B.toCharArray(); int lenA=AStr.length; int lenB=BStr.length; int x=0,y=0;//記錄最長子串結束的位置 int a[][]=new int[lenA][lenB];//初始化矩陣 for(int i=0;i<lenA;i++){ for(int j=0;j<lenB;j++){ if(AStr[i]==BStr[j]){ if(i==0||j==0){ a[i][j]=1; }else{ a[i][j]=a[i-1][j-1]+1; } if(a[i][j]>max){ max=a[i][j]; x=i; y=j; } } else a[i][j]=0; } } return max; }}

附:我看到還有一維數組來做的例子,但是我覺得二維比較容易理解,但還是貼下代碼 以下代碼來自: https://my.oschina.net/leejun2005/blog/117167

public class LCString2 { public static void getLCString(char[] str1, char[] str2) { int i, j; int len1, len2; len1 = str1.length; len2 = str2.length; int maxLen = len1 > len2 ? len1 : len2; int[] max = new int[maxLen]; int[] maxIndex = new int[maxLen]; int[] c = new int[maxLen]; // 記錄對角線上的相等值的個數 for (i = 0; i < len2; i++) { for (j = len1 - 1; j >= 0; j--) { if (str2[i] == str1[j]) { if ((i == 0) || (j == 0)) c[j] = 1; else c[j] = c[j - 1] + 1; } else { c[j] = 0; } if (c[j] > max[0]) { // 如果是大于那暫時只有一個是最長的,而且要把后面的清0; max[0] = c[j]; // 記錄對角線元素的最大值,之后在遍歷時用作提取子串的長度 maxIndex[0] = j; // 記錄對角線元素最大值的位置 for (int k = 1; k < maxLen; k++) { max[k] = 0; maxIndex[k] = 0; } } else if (c[j] == max[0]) { // 有多個是相同長度的子串 for (int k = 1; k < maxLen; k++) { if (max[k] == 0) { max[k] = c[j]; maxIndex[k] = j; break; // 在后面加一個就要退出循環了 } } } } } for (j = 0; j < maxLen; j++) { if (max[j] > 0) { System.out.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 自治县| 池州市| 冷水江市| 涞源县| 芜湖县| 阜康市| 瑞安市| 都匀市| 通渭县| 长宁县| 三都| 平利县| 平邑县| 象州县| 额敏县| 清苑县| 马山县| 孙吴县| 桐梓县| 长海县| 镇坪县| 伊金霍洛旗| 都匀市| 乐至县| 岳西县| 桃江县| 焉耆| 都安| 尉犁县| 麻江县| 建湖县| 安远县| 乌鲁木齐县| 永仁县| 剑河县| 甘谷县| 淮北市| 仪陇县| 东城区| 梅河口市| 江油市|