leetcode5-最长回文子串

2021-11-29  本文已影响0人  编号3577298

以每个位置为中心,向两头扩散。分两种情况:1,以数为中心扩散,解决奇数长度的子串;2,以两数间空格为中心扩散,解决偶数长度的子串。
采用递归法判断每个位置的最长子串有多长。

class Solution:
    def longestPalindrome(self, s: str) -> str:
        max_len = 1
        c = 0
        for i in range(len(s)):
            odd_n = self.judge_odd(s, i)
            even_n = self.judge_even(s, i)
            tmp = max(odd_n, even_n, max_len)
            if tmp != max_len:
                c = i
                max_len = tmp
        start = c - max_len // 2
        return s[start:start+max_len]
    
    def judge_odd(self, s, i, step=1):
        if i - step < 0 or i + step > len(s) - 1 or s[i-step] != s[i+step]:
            return (step - 1) * 2 + 1
        return self.judge_odd(s, i, step + 1)
    
    def judge_even(self, s, i, step=1):
        if i - step < 0 or i + step - 1> len(s) - 1 or s[i-step] != s[i+step-1]:
            return (step - 1) * 2
        return self.judge_even(s, i, step + 1)
上一篇 下一篇

猜你喜欢

热点阅读