算法基础_递归_求两个字符串的公共最长子序列长度

问题内容:

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

注:子序列是一个字符串内部若干个元素,可以不连续;子串是连续的一串字符,此处不要有confusion

 

解题源代码如下:

/**
 *     求两个字符串公共子序列的最大长度
 *    子串:中间必须连续
 *    子序列:是字符串中的一些元素
 * @author Administrator
 *
 */
public class Dmo03 {
    static int counter = 0;
    
    public static int f(String str1,String str2) {
        if(str1.length()==0||str2.length()==0)return 0;
        
        if(str1.charAt(0)==str2.charAt(0))
            return f(str1.substring(1),str2.substring(1))+1;
        else
            return Math.max(f(str1.substring(1),str2),f(str2.substring(1),str1));
    }
    
    
    public static void main(String[] args) {
        System.out.println(f("abcasdfdafadfsdf","scbcdaasdfadfadsdfasf"));
        //System.out.println("abc".substring(1));
    }
}

 

解题思路:

分三步:1.先判断头部 ,如果头部相等,将字符串除头部以外的子串切下来给下一层递归

    2.如果头部不相等,则让递归产生分支,利用Math包里的“max”方法,传入两种情况——假设字符串是A、B两个,则第一种情况传入A字符串去掉头部之外的部分和B,第二种情况则传入B字符串除掉头部之外的部分和A

    3.设置递归退出条件,仔细想一下就可以知道,当某一个字符串的长度变为零时,最大子序列的长度就已经生成了,即判断条件为(A的长度是否为为零||B的长度是否为零),如果是,则返回0

 

总结:关于递归逻辑分析的一点儿小技巧:只用管第一层递归所要做的事情,因为后面都是一样的,只要把第一层的逻辑整理清楚,后面的直接丢到创建的函数里就行了,一层一层的分析反而麻烦,是在搞不清的话,就把每一层的数据在纸上写出来,写出一两层的时候逻辑就一目了然了,个人见解,有不当之处还请提出/抱拳/抱拳

 

希望对大家有所帮助

以上

 

转载于:https://www.cnblogs.com/lavender-pansy/p/10525831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值