题解 | #NC17 最长回文子串#

Python 版本

暴力遍历

class Solution:
    def getLongestPalindrome(self , A: str) -> int:
        for i in range(len(A), 0, -1): # 从大到小控制回文长度
            for j in range(0, len(A)-i+1): # 控制不同长度回文的位置
                if (A[j:j+i] == A[j:j+i][::-1]): # 是否回文
                    return i

辅助扩散

class Solution:
    def fun(self, s: str, begin: int, end: int) -> int:
        #每个中心点开始扩展
        while begin >= 0 and end < len(s) and s[begin] == s[end]: 
            begin -= 1
            end += 1
        #返回长度
        return end - begin - 1 
    def getLongestPalindrome(self , A: str) -> int:
        maxlen = 1
        #以每个点为中心
        for i in range(len(A) - 1): 
            #分奇数长度和偶数长度向两边扩展
            maxlen = max(maxlen, max(self.fun(A, i, i), self.fun(A, i, i + 1)))
        return maxlen
全部评论

相关推荐

点赞 评论 收藏
分享
高斯林的信徒:问你有没有保底,好人啊,就差把这是kpi面告诉你了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务