1、题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
输入: “cbbd”
输出: “bb”
2、分析
题目要求去找最长的回文子串,回文子串即从前面读与从后面读是一致的,所以当时想到使用切片去find,找到符合top和end字符,然后判断从前读与从后读是否一致,唯一感觉不好就是使用for循环,时间复杂度可能会比较高。
3、代码
class Solution:
def longestPalindrome(self, s: str) -> str:
max_length = ''
l = len(s)
ss = s # 接下来要进行切片,必须保持始终从最原始的数据切片
for x in range(l):
index = 0
s = ss[x:]
while index != -1: # 没有找到会返回 -1
index = s.find(s[0], index, len(s)) # 定义开始位置,结束位置
if s[:index+1] == s[index::-1] and len(s[:index+1]) > len(max_length):
max_length = s[:index+1]
if index != -1:
index += 1
return ss if len(ss) == 1 else max_length
4、结果
执行用时 :6372 ms, 在所有 python3 提交中击败了6.22% 的用户
内存消耗 :12.8 MB, 在所有 python3 提交中击败了99.17%的用户
5、改进
看结果发现果然时间复杂度比较高,但是感觉for循环遍历是不能避免的,所以时间复杂度的优化,只能是for循环内的查找方法的优化。
望您:
“情深不寿,强极则辱,谦谦君子,温润如玉”。