最近在項目中碰到了這樣的一個問題,要比較JS和CSS是否作了修改,先是想着藉助第三方工具發現沒找到,後面轉念一想,這個問題不就是對兩個文件的第一行求最大的公共子串嘛,既然是要求公共子串的最大長度,由此想到了動態規劃算法。算法
代碼是從網上C++改寫過來的,感謝那位C++的兄弟,代碼以下:工具
package dp; /** * 用動態規劃算法求解 最長公共子串 * @author * */ public class LCSSuffix { private static String getLCSLength(String s,String t){ int p = s.length() ; int q = t.length(); String[][] num = new String[p][q]; char char1 = '\0'; char char2 = '\0' ; int len = 0 ; String lcs = ""; for(int i = 0;i<p ;i++){ for(int j=0;j<q;j++){ char1 = s.charAt(i); char2 = t.charAt(j); if(char1 != char2){ num[i][j] = ""; }else { if(i==0 ) num[i][j] = String.valueOf(char1) ; else if(j ==0)num[i][j] = String.valueOf(char2); else num[i][j] = num[i-1][j-1] +String.valueOf(char1) ; if(num[i][j].length() > len){ len = num[i][j].length(); lcs = num[i][j]; }else if(num[i][j].length() == len){ lcs = lcs +","+num[i][j] ; } } } } return lcs ; } public static void main(String[] args) { String lcs = getLCSLength("baba","abab"); System.out.println(lcs); } }