Leetcode5 -- 最长回文子串 -- Python -- 中心扩散法

@Leetcode5 – 最长回文子串 – 中心扩散法

最长回文子串

题目

Leetcode5 -- 最长回文子串 -- Python -- 中心扩散法_第1张图片

题目分析

  • 首先理解什么是回文串,就是正着读和反着读都一样的字符串
  • 看了题解一共有三种方法,暴力法,中心扩散法,动态规划法,这里着重介绍中心扩散法。
  • 中心扩散法的主要解题思路:
    (1)遍历字符串的每一个字符,每一个字符都作为一次中心,向两边扩散,如果两边一样,就继续扩散,不一样则停止
    (2)但是会分两种情况,就是回文串是偶数,和奇数。
    Leetcode5 -- 最长回文子串 -- Python -- 中心扩散法_第2张图片
    (3)所以在代码里相应的就分成了两种情况

代码

class Solution:
    def longestPalindrome(self, s: str) -> str:
        maxstr = ''
        maxlen = 1
        l = len(s)
        if l == 0:
            return ''
        if l == 1:
            return s
        for i in range(len(s)):
            oddstr, oddlen = self.mix_extend(s, i, i)
            evenstr, evenlen = self.mix_extend(s, i, i+1)
            if (oddlen>evenlen) & (oddlen>maxlen):
                maxlen = oddlen
                maxstr = oddstr
            if (evenlen>oddlen) & (evenlen>maxlen):
                maxlen = evenlen
                maxstr = evenstr
        return maxstr
    
        
        
        
    def mix_extend(self,s, left, right):
        while left >= 0 and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left+1:right], right-left+1


每天一点进步,加油!。1


  1. @Qichao ↩︎

你可能感兴趣的:(LeetCode)