LeetCode.5.最长回文子串

这是原题链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
这道题可以利用动态规划的思想:
回文串就是一个字符串的和它的翻转之后的字符串相同的字符串。
首先我们构造如下的矩阵 P ( i , j ) P(i,j) P(i,j)
P ( i , j ) P(i,j) P(i,j)的定义如下:
P ( i , j ) = { t r u e , 如 果 子 串 S i , . . . S j 是 回 文 子 串 f a l s e , 其 它 情 况 P(i,j) = \left\{\begin{matrix} true, & 如果子串S_{i},...S_{j}是回文子串\\ false, & 其它情况 \end{matrix}\right. P(i,j)={true,false,Si,...Sj
对于 P ( i , j ) P(i,j) P(i,j)有如下的递归式:
P ( i , j ) = P ( i + 1 , j − 1 )   a n d   S i = = S j P(i,j) = P(i+1,j-1) \ and\ S_{i} == S{j} P(i,j)=P(i+1,j1) and Si==Sj
基本示例为:
P ( i , j ) = t r u e P ( i , i + 1 ) = ( S i = = S i + 1 ) P(i,j) = true\\ P(i,i+1) = (S_{i} == S_{i+1}) P(i,j)=trueP(i,i+1)=(Si==Si+1)

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        n = len(s)
        p = [[False]*n for i in range(n)]     
       
        low,high = 0,0
        for i in range(n):
            for j in range(n-i):
                p[j][j+i] =  s[j] == s[j+i] and (i<2 or p[j+1][j+i-1])
                if p[j][j+i]:
                    low,high = j,j+i+1
        return s[low:high]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值