leetcode5 寻找最长度最大的回文字符串。
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
解题思路:
这是一个动态规划问题
子问题是
令dp[i][j]表示S[i]至S[j]所表示的子串是否是回文子串,是则为1,不是为0。这样根据S[i]是否等于S[j],可以把转移情况分为两类:
①若S[i]=S[j],那么只要S[i+1]和S[j-1]是回文子串,S[i]至S[j-1]就是回文子串;如果S[i+1]至S[j-1]不是回文子串,则S[i]至S[j]一定不是回文子串。
②若S[i]!=S[j],那S[i]至S[j]一定不是回文子串。
class Solution:
def longestPalindrome(self, s):
if s == "":
return ""
end = 0;
start = 0
for i in range(len(s)):
common = s[i]
left = i - 1;
right = i + 1
while (left >= 0) and (right < len(s)) and (s[left] == s[right]):
left -= 1
right += 1
len1 = right - left - 1
left = i;
right = i + 1
while (left >= 0) and (right < len(s)) and (s[left] == s[right]):
left -= 1
right += 1
len2 = right - left - 1
lenall = max(len1, len2)
if lenall > end - start:
start = i - int((lenall - 1) / 2)
end = i + int(lenall / 2)
return s[start:end + 1]

浙公网安备 33010602011771号