求两个串的最大公共子序列的长度

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

posted @ 2018-03-06 21:32  小狐狸乖乖  阅读(180)  评论(0编辑  收藏  举报