思考题15.2-最长回文子序列

【写在前面】:最近在复习期末考试,所以python专题有一段时间没有更新,等期末考试完之后继续更新python专题。明天就要考算法了,想着今晚写一下博客就当是复习一遍了,有什么写的不妥当的地方欢迎大佬指正。

【题目】:(最长回文子序列)回文(palindrome)是正序与逆序相同的非空字符串。例如,所有长度为1的字符串、civic、racerar、aibohphobia(害怕回文之意)都是回文。设计高效算法,求给定输入字符串的最长回文子序列。例如,给定输入character,算法应该返回carac。算法的运行时间是怎样的?

解:

1、分析问题:题目让我们设计一个高效算法,求给定输入字符串的最长回文子序列,这道题可以对比最长子数组问题。

2、算法设计思想描述:设X=<x1,x2,...xn>是输入字符串序列,Z=<z1,z2,...zm>是X的最长回文子序列(LPS),X(i,j)是指以xi开始以xj结束的子序列。由题意得Z应该满足以下情况:

1)若n=1,则m=1,且z1=x1.

2)若n=2,x1=xn,则m=2,z1=x1=xn=zm。

3)若n=2,x1!=xn,则m=1,z1=x1or xn。

4)若n>2,x1=xn,则m>2,z1=x1=xn=zm,Z(2,m-1)是序列X(2,n-1)的LPS

5)若n>2,x1!=xn,则若z1!=x1,那么Z是序列X(2,n)的LPS。

6)若n>2,x1!=xn,则若zm!=xn,那么Z是序列X(1,n-1)的LPS。

令P[i,j]为X(i,j)对应的LPS的长度,那么对于P[i,j]应该满足以下递归式:

1)当i=j时,p[i,j]=1;

2)当j=i+1,xi==xj,p[i,j]=2;

3)当j=i+1,xi!=xj,p[i,j]=1;

4)当j>i+1,xi==xj,p[i,j]=p[i+1,j-1]+2;

5)当j>i+1,xi!=xj,p[i,j]=

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值