LeetCode 5. 最长回文子串|刷题打卡

142 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

题目链接:LeetCode 5. 最长回文子串
难度:中等

一、题目描述

给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

示例 3:

输入:s = "a"
输出:"a"

示例 4:

输入:s = "ac"
输出:"a"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母(大写和/或小写)组成

二、思路分析

思路1:从0到n,以某1个或2个位置为中心,找到其最长回文串,在这个过程中,不断比较并保留最长回文子串。
思路2:判断一个字符串是不是回文串很简单了。从长到短,判断字符串是不是回文串就可以了,判断为是的时候,立即返回即可,因为是从长到短的嘛,更长的不行,才会轮到现在的串来判断。

三、AC 代码

按照思路1

    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        if n == 0:
            return ""

        def getPalindrome(s,l,r):
            while l >= 0 and r < len(s) and s[l]==s[r]:
                l-=1
                r+=1
            return s[l+1:r]
        res = getPalindrome(s,0,0)
        for i in range(1,n):
            candidate = getPalindrome(s,i,i)
            if len(candidate) > len(res):
                res = candidate
            candidate = getPalindrome(s,i-1,i)
            if len(candidate) > len(res):
                res = candidate
        return res

四、总结

做题不要一开始就尝试想高效的办法,先想到的办法就可以先尝试。做出来了或者做不出来才考虑其他方法。
就这题来说,即使有DP的办法,时间复杂度是一样的,但DP空间复杂度更高,还不如这个方法。

如果你觉的还不错的话,给我点个赞吧💐