【写在前面】:最近在复习期末考试,所以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,