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]


 

posted @ 2020-07-25 22:57  misaiya9  阅读(56)  评论(0)    收藏  举报