@@-M-5. Longest Palindromic Substring
@@代表不是特别难, 但是值得反复练手的题目, 通常包括一些细节问题, 以及代码结构的练习
# 这题思路其实巨简单.. 就是写代码要写的简洁明了, 适合反复练习
# 0 O(n^2), O(n)思路很简单, 就是从左往右在把一个间隙和数字当做当前可能额palindrome开始往两边
# 扩展, 如果一直符合palindrome就一直扩展直到不满足为止, 然后记录下这个palindrome, 然后再和之前
# 暂存的最长的palindrome比大小, 保留大的那个
# 另外这个方法的空间复杂度可以优化到O(1), 就是不要直接传str和比较len(str), 全程用传下标即可,
# 比也是拿下标的right-left就好了, 最终输出res即可.(输出不考虑到空间复杂度里面, 当然如果输出也算空间
# 复杂度的话, 那这样最终还是O(n), 因为res无论如何都要存一个O(n)的str的)
class Solution:
def longestPalindrome(self, s: str) -> str:
def check_palindrome(left, right):
# 这个while很精髓
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left+1:right]
if not s:
return ''
res = s[0]
for i in range(1, len(s)):
odd = check_palindrome(i, i)
even = check_palindrome(i-1, i)
# 注意这里max的用法
res = max(odd, even, res, key = len)
return res
Last updated
Was this helpful?