您的位置:首页 > 编程语言 > Python开发

【Leetcode】【python】Longest Palindromic Substring

2017-08-08 04:23 423 查看

题目大意

给出一个字符串S,找到一个最长的连续回文串。

解题思路

动态规划

dp[i][j] 表示的是 从i 到 j 的字串,是否是回文串。

则根据回文的规则我们可以知道:

如果s[i] == s[j] 那么是否是回文决定于 dp[i+1][ j - 1]

当 s[i] != s[j] 的时候, dp[i][j] 直接就是 false。

动态规划的进行是按照字符串的长度从1 到 n推进的。

代码

class Solution(object):

def getlongestpalindrome(self, s, l, r):
while l >= 0 and r < len(s) and s[l] == s[r]:
l -= 1; r += 1
return s[l+1 : r]  # 例如bab,最后l=-1,r=3,所以要s[l+1 : r]也就是[0,3]

def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
palindrome = ''
for i in range(len(s)):
len1 = len(self.getlongestpalindrome(s, i, i))  # len1是中间是单一字母的回文数
if len1 > len(palindrome):
palindrome = self.getlongestpalindrome(s, i, i)
len2 = len(self.getlongestpalindrome(s, i, i + 1))  # len2是中间是和后面一个字母相同的回文数
if len2 > len(palindrome):
palindrome = self.getlongestpalindrome(s, i, i + 1)
return palindrome


总结

回文有两种可能:aba和abba
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python leetcode