[力扣][精选]第5题-最长回文子串

[力扣][精选]第5题-最长回文子串

答案:

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        max_num = 0#最长回文子串长度
        ans = s[0]#为最长回文子串赋初值,直接赋为字符串的第一个字符以应对单字符的字符串
        for j in range(len(s)):#循环第一层
            for i in range(len(s) - j + 1):#循环第二层
                if max_num>i:#优化:判断是否长于当前已找到的最长回文字符串
                    continue
                ss = s[j:j + i]#获取子串
                s2 = ss[::-1]#翻转子串
                if ss == s2 and i > max_num:#判断是否为回文字符串
                    ans = ss#给答案赋值
                    max_num = i#重新赋值max_num
        return ans

实际上解决的思路是:暴力+优化
如果只使用暴力的解法,那么当遇到较长的输入字符串的时候必定会超时,而优化的思路实际上很简单,只需要加上判断当前正在判断的字符串是否长于已寻找到的最长回文字符串,若否,则直接跳过判断,若是,则继续进行判断。
判断回文字符串的算法也很简单,将一个字符串使用字符串的索引方式翻转,随后直接判断是否相等即可。
本题的核心要点:

  1. 优化是必须的,尽量去除不必要的计算量
  2. 使用字符串的索引翻转字符串
  3. 维护一个最大回文子串长度变量max_num(注意不要直接使用max)

180 / 180 个通过测试用例
状态:通过
执行用时: 7720 ms
内存消耗: 13.5 MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值