Leetcode 5: 最长回文子串

题目   难度 中等

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

 

思路

回文串分奇数长度和偶数长度:

(1)特殊情况单独处理 长度小于等于2

(2)逐一对比子串对半分的元素

……

代码

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


        len1 = [1]
        cmax =1
        
        if len(s)<2:
            return s
        maxstr=s[0]
        if len(s)==2:
            if s[0]==s[1]:
                return s
            else:
                return maxstr
        
        for i in range(len(s)):
            t =i
            c= 1 
            # 奇数长度的回文
            for j in range(1,i+1):
                if i+j>=len(s):
                    break
                if s[i-j]==s[i+j]:
                    c+=2
                else:
                    break
           
            if c>cmax:
                maxstr = s[i-(c-1)//2:i+(c-1)//2+1]
                cmax = c
            
            # 偶数长的回文
            c=0
            for j in range(i+1):
                if i+j+1>=len(s):
                    break
                if s[i-j] ==s[i+j+1]:
                    c+=2
                else:
                    break
           
            if c>cmax:
                cmax = c
                maxstr = s[i-c//2+1:i+c//2+1]
            
        return maxstr

  

 

posted @ 2020-05-21 10:28  SuckChen  阅读(143)  评论(0编辑  收藏  举报