Leetcode--Longest Palindromic Substring(最长回文子序列)
来源:互联网 发布:差分演化算法及其应用 编辑:程序博客网 时间:2024/06/01 10:11
题目:
给定字符串s,找出s中的最长回文子序列(即最长的中心对称子序列),如“ababd”,返回“aba”或“bab”; “abbd”返回“bb”,“a”返回“a”
解题思路:
1、考虑用动归的方式来解题,因为后面的计算会用到前面计算的结果。如“fabcbad”,首先知道“bcb”是回文子序列,再知道“abcba”也是回文子序列,故每次只需判断前期回文子序列的两边字符是否相同,相同则增加两边字符。
2、数据存储的方式,可以用d[i][j]来存储i到j是否是回文子序列,是则为1,否则为0。这样可以通过填充表d[i][j]即可得到最终结果
3、递归表达式:
f(i,j) = 1 若i==j (i和j之间只包含一个字符,这个字符是回文子序列,初始条件)
= 0 若j-i==1,且s[i]!=s[j] (i和j之间包含两个字符,这两个字符不同,不是回文子序列,初始条件)
= 1 若j-i==1,且s[i]==s[j] (i和j之间包含两个字符,且这两个字符相同,是回文子序列,初始条件)
= 1 若d[i+1][j-1]==1 且s[i]==s[j] (i和j之间多于两个字符,看d[i+1][j-1]是否是回文子序列,若是,且s[i]==s[j],则整体也是)
= 0 其他 (不满足上述条件的,都不是回文子序列)
4、通过递归表达式,可以得到f函数的定义,从而对d[i][j]的内容进行填充
代码如下:
class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ dist = [[0]*len(s) for i in range(len(s))] def f(i,j): if(j-i==0): dist[i][j] = 1 return 1 if(((j-i)==1) & (s[i]==s[j])): dist[i][j] = 1 return 1 if(((j-i)==1) & (s[i]!=s[j])): dist[i][j] = 0 return 0 if((s[i]==s[j])&(dist[i+1][j-1]==1)): dist[i][j] = 1 return 1 else: dist[i][j] = 0 return 0 i = len(s)-1 j = 0; while(j<=len(s)-1): for k in range(len(s)-j): f(k,k+j) j=j+1 j = 0 while(i>=j): e = j while(e>=0): print e print i-(j-e) print s[e:i-(j-e)+1] if(dist[e][i-(j-e)]==1): print s[e:i-(j-e)+1] return s[e:i-(j-e)+1] e = e-1 j = j+1
阅读全文
1 0
- Leetcode--Longest Palindromic Substring(最长回文子序列)
- 最长回文子序列 Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring 最长回文子串
- LeetCode Longest Palindromic Substring(最长回文子串)
- [LeetCode]—Longest Palindromic Substring 最长回文子串
- LeetCode | Longest Palindromic Substring(最长回文子串)
- Longest Palindromic Substring [LeetCode] 最长回文子串
- LeetCode OJ 之 Longest Palindromic Substring (最长回文子串)
- [C++]LeetCode: 99 Longest Palindromic Substring (最长回文子串)
- LeetCode Longest Palindromic Substring 最长回文子串
- LeetCode-5 Longest Palindromic Substring(求最长回文子串)
- LeetCode:Longest Palindromic Substring 最长回文子串
- 最长回文子串(LeetCode #5 Longest Palindromic Substring)
- 【LeetCode】5.Longest Palindromic Substring 最长回文子串问题
- LeetCode 5. Longest Palindromic Substring(最长回文子串)
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
- leetcode--Longest Palindromic Substring--最长回文子串--
- LeetCode:Longest Palindromic Substring 最长回文子串
- codeforces 841C Leha and Function
- 收藏(持续更新中)
- 算法竞赛入门经典java版程序CH3 UVa1368
- 安卓新版本升级,并自动安装apk
- 每天每周每月每年程序员该做的事情
- Leetcode--Longest Palindromic Substring(最长回文子序列)
- Execution failed for task ':app:mergeDebugResources'. > Error: java.util.concurrent.ExecutionExcepti
- Codeforces round#429 div2 C
- composer安装laravel
- 引入布局与创建自定义控件
- 常用的Linux命令
- 推荐一个网站
- NOIP2009普及组-细胞分裂
- 算法竞赛入门经典java版程序CH3 UVA1585