码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-06 23:27:14      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:math   int end   使用   一个   static   byte   下标   pos   length   

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

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

标签:math   int end   使用   一个   static   byte   下标   pos   length   

原文地址:https://www.cnblogs.com/foxobedient/p/8516904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!