1. 程式人生 > >求兩個串的最大公共子序列的長度

求兩個串的最大公共子序列的長度

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             return
Math.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(出口)

求兩個串的最大公共子序列的長度