原题
https://leetcode.cn/problems/longest-palindromic-substring/
思路
中心扩散法。遍历字符串在每个下标处尝试构建两种回文字符串(aa或者aba)。取最长的字符串长度。
复杂度
时间:O(n*n)
空间:O(1)
Python代码
class Solution:
def longestPalindrome(self, s: str) -> str:
ans = s[0]
for i in range(len(s)):
# 回文类型1: aba
j = 1
while i - j >= 0 and i + j <= len(s) - 1 and s[i - j] == s[i + j]:
pal = s[i - j : i + j + 1]
if len(pal) > len(ans):
ans = pal
j += 1
# 回文类型2: aa
k = 1
while (
i - (k - 1) >= 0 and i + k <= len(s) - 1 and s[i - (k - 1)] == s[i + k]
):
pal = s[i - (k - 1) : i + k + 1]
if len(pal) > len(ans):
ans = pal
k += 1
return ans
Go代码
func longestPalindrome(s string) string {
ans := s[:1]
for i, _ := range s {
// 回文类型1: aba
j := 1
for i-j >= 0 && i+j <= len(s)-1 && s[i-j] == s[i+j] {
pal := s[i-j : i+j+1]
if len(pal) > len(ans) {
ans = pal
}
j++
}
// 回文类型2: aa
k := 1
for i-(k-1) >= 0 && i+k <= len(s)-1 && s[i-(k-1)] == s[i+k] {
pal := s[i-(k-1) : i+k+1]
if len(pal) > len(ans) {
ans = pal
}
k++
}
}
return ans
}
本文介绍了使用中心扩散法在Python和Java中解决LeetCode问题“最长回文子串”的解决方案,通过在每个字符周围尝试构建回文字符串并比较长度来找到最长的回文子串,时间复杂度为O(n*n),空间复杂度为O(1)。
365

被折叠的 条评论
为什么被折叠?



