動態規劃之longest common subsequence最大公共子序列
阿新 • • 發佈:2019-01-03
這題相對於longest common substring而言更容易一些,區別就子序列和子串, 串的話每個字母是要連續的,序列的話,不要求,用動態規劃做,遞推公式如下,不難:
上程式碼:
public class CommonSubseq { public static void main(String[] args){ String strA = "BDCABA"; String strB = "ABCBDAB"; System.out.println(longestSubseq(strA, strB)); } public static String longestSubseq(String str1, String str2){ return innerLongestSubseq(str1, str2, str1.length()-1, str2.length()-1); } public static String innerLongestSubseq(String str1, String str2, int i , int j){ if(str1==null || str2==null){ return null; } if(i==-1 || j==-1){ return ""; }else{ if(str1.charAt(i)==str2.charAt(j)){ return innerLongestSubseq(str1, str2, i-1, j-1)+str1.charAt(i); }else{ String ts1 = innerLongestSubseq(str1, str2, i-1, j); String ts2 = innerLongestSubseq(str1, str2, i, j-1); if(ts1.length()>ts2.length()){ return ts1; }else{ return ts2; } } } } }