求兩個串的最大公共子序列的長度
阿新 • • 發佈:2018-03-07
notes col length body 子字符串 使用遞歸 seq ons commons
1 public class CommonSubsequence { 2 3 public static int f(String s1,String s2){ 4 5 if(s1.length()==0||s2.length()==0) return 0; 6 7 if(s1.charAt(0)==s2.charAt(0)) 8 return f(s1.substring(1),s2.substring(1))+1; 9 else 10 returnMath.max(f(s1.substring(1),s2), f(s1,s2.substring(1))); 11 12 } 13 14 15 public static void main(String[] args) { 16 int k =f("abc","xbacd"); 17 System.out.println(k); 18 } 19 20 }
Notes:
①String s.charAt(int index)返回字符串中下標為index的字符;
String s.subString(int beginIndex,int endIndex)返回字符串的子字符串,包括下標為beginIndex,不包括下標為endIndex;
Math類中的方法都被定義為static形式,Math類可以在主函數中直接調用;
Math.max(int a,int b)返回兩個參數中的最大值,參數可以是float、byte、double類型;
②使用遞歸只能求出其長度,相比列舉序列要簡單許多(動態規劃);遞歸步驟過於復雜;
③字符串a:xasfas 字符串b:as
字符串a的第一個字符==字符串b的第一個字符 -->> 兩遍都剩余的字符串求公共子序列長度+1
字符串a的第一個字符!=字符串b的第一個字符 -->>a除第一個字符以外和b所求公共子序列長度
-->>a和b除第一個字符以外所求公共子序列長度
a或b序列長度為0時-->>0(出口)
求兩個串的最大公共子序列的長度