美文网首页
[leetcode]005_Longest Palindromi

[leetcode]005_Longest Palindromi

作者: 路人乙yh | 来源:发表于2019-02-18 16:01 被阅读2次

1 题目描述

给定一个字符串 s ,找出 s 中最长的回文子字符串,字符串的长度不超过1000。
示例:

input : 'abab'
out : 'aba'

input : 'abba'
out : 'abba'

2 题目解析

这道题有很多种解法,比较容易理解和实现,并且代码简单的是“动态规划”方法。
这里我们用到一种表示:dp[i][j]表示字符串 s 中索引值从 i 到 j 的字符是回文字符。
用公式表示为:
dp[i][j]=\begin{cases}dp[i] == dp[j],\ if\ j-i=0\ or\ 1\\dp[i] == dp[j] \ \&\ dp[i+1] == dp[j-1], if \ j-i>=2\end{cases}
那么这道题的解题过程就是依次遍历每个字符,用dp是否为真判断从 i 到 j 是不是回文字符串。

3 代码

class Solution:
    def longestPalindrome(self, s):
        n = len(s)
        if n == 0 or 1:return s
        start = end = 0
        maxLen = 1
        dp = [[False]*n for i in range(n)] #作为容器保存 dp
        for j in range(n):
            for i in range(j):
            # 保证 i 是字串起始, j 是子串末尾
                dp[i][j] = s[i] == s[j] and (j-i<2 or dp[i+1][j-1])
                if dp[i][j] and j-i+1 > maxLen:
                    maxLen = j-i+1
                    start = i
                    end = j
                    dp[i][j] = True
            dp[j][j] = True
                
        return s[start: end+1]

string = 'test sub aba'
s = Solution()
s.longestPalindrome(string)

相关文章

网友评论

      本文标题:[leetcode]005_Longest Palindromi

      本文链接:https://www.haomeiwen.com/subject/cuoaeqtx.html