递归法之最长回文子序列(java)

本文介绍了如何使用递归法解决寻找字符串的最长回文子序列问题。通过判断字符串首尾元素是否相同,得出两种情况:当首尾元素相同时,最长回文子序列长度为lps(1,n-2)+2;不同时,最长回文子序列长度为max(lps(1,n-1), lps(0,n-2))。以实例详细解析了算法的运用。" 117635428,9803657,Qt编程:QDockWidget实战指南,"['Qt开发', 'GUI设计', 'C++编程', '软件界面']
摘要由CSDN通过智能技术生成

1.如果str的最后一个元素和第一个元素是相同的,则有:lps(0,n-1)=lps(1,n-2)+2;例如字符串序列“AABACACBA”,第一个元素和最后一个元素相同,其中lps(1,n-2)表示红色部分的最长回文子序列的长度;

2.如果str的最后一个元素和第一个元素是不相同的,则有:lps(0,n-1)=max(lps(1,n-1),lps(0,n-2));例如字符串序列“ABACACB”,其中lps(1,n-1)表示去掉第一元素的子序列,lps(0,n-2)表示去掉最后一个元素的子序列。


返回最长回文子序列的长度:

package ddd.lps;

public class LPS {
    public static void main(String args[]) {
        String string = "ACGTGTCAAAATCG";
        System.out.println("最长回文子序列長度为:" + lps(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值