【Leetcode 5】 最长回文子串

在这里插入图片描述
解法1 动态规划
在这里插入图片描述
在这里插入图片描述

class Solution:
    def longestPalindrome(self, s: str) -> str:


        n=len(s)

        maxstr=""
        dp=[ [False]*n   for _ in range(n)]   注意python创建二维数组的方法
        for l in range(n):
            for i in range(n):
                j=i+l
                if j >=n:
                    break
                if l==0:
                    dp[i][j]=True
                elif l==1:                  #这里不能只加if,如果直接if不用elif
                    dp[i][j]=(s[i]==s[j])
                else:                        #else里的语句也会执行,当遍历到最后一个字母时会索引越界,dp[i+1]就超出了最大索引
                    dp[i][j]=(dp[i+1][j-1] and s[i]==s[j])  
                if dp[i][j] and l+1 >len(maxstr):
                    maxstr=s[i:j+1]
        return maxstr


s1=Solution()
s1.longestPalindrome("ABABA")

在这里插入图片描述

解法2 中心扩展算法
在这里插入图片描述

class Solution {
    public String longestPalindrome(String s) {
         int begin=0,end =0,maxlen=1;

         if (s.length()<1 || s==null) return "";     //获得字符串的长度s.length()  而获得数组的长度    s.length   不加后面的()
         
         for (int i =0 ;i<s.length();i++){
            int oddlen=expandcenter(s,i,i);
            int evenlen=expandcenter(s,i,i+1);
            int curmaxlen=Math.max(oddlen,evenlen);
            /*     第二种方法
            if(curmaxlen>maxlen){
                maxlen=curmaxlen;
                begin=i-(maxlen-1)/2;
            }
            */
            if(curmaxlen>end-begin+1){
                begin=i-(curmaxlen-1)/2;
                end=i+curmaxlen/2;
            }
         }
         //return s.substring(begin,begin+maxlen);   第二种方法
         return s.substring(begin,end+1);
    }


    public int expandcenter(String s,int left,int right){
        while(left>=0 && right<s.length() && s.charAt(left)==s.charAt(right)){
                left--;
                right++;
        }
        //因为退出循环时,right和left指向的字符不包含在里面
        return right-left+1-2;
    }
}

在这里插入图片描述

解法3 Manacher 算法
具体请看参考连接
参考链接https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值