[力扣][精选]第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
实际上解决的思路是:暴力+优化
如果只使用暴力的解法,那么当遇到较长的输入字符串的时候必定会超时,而优化的思路实际上很简单,只需要加上判断当前正在判断的字符串是否长于已寻找到的最长回文字符串,若否,则直接跳过判断,若是,则继续进行判断。
判断回文字符串的算法也很简单,将一个字符串使用字符串的索引方式翻转,随后直接判断是否相等即可。
本题的核心要点:
- 优化是必须的,尽量去除不必要的计算量
- 使用字符串的索引翻转字符串
- 维护一个最大回文子串长度变量max_num(注意不要直接使用max)
180 / 180 个通过测试用例
状态:通过
执行用时: 7720 ms
内存消耗: 13.5 MB