class Solution:
def longestPalindrome(self, s: str) -> str:
if not s:
return ""
else:
start, end = 0, 0
for i in range(len(s)):
l1, r1 = self.expand(s, i, i)
l2, r2 = self.expand(s, i, i + 1)
if r1 - l1 > end - start:
start, end = l1, r1
if r2 - l2 > end - start:
start, end = l2, r2
return s[start:end + 1]
def expand(self, s: str, l: int, r: int) -> (int, int):
while l >= 0 and r < len(s) and s[l] == s[r]:
l -= 1
r += 1
return l + 1, r - 1
if __name__ == "__main__":
# 输入读取
s = input("Enter a string: ")
# 解决方案和输出
sol = Solution()
result = sol.longestPalindrome(s)
print(f"The longest palindromic substring is: {result}")
-
longestPalindrome 方法:
longestPalindrome
方法通过遍历字符串s
的每个字符,以每个字符为中心(分别考虑奇数长度和偶数长度的回文串),调用expand
方法来扩展找到最长的回文子串。start
和end
变量记录当前找到的最长回文子串的起始索引和结束索引。- 在每次找到更长的回文子串时,更新
start
和end
的值。 - 最后返回
s[start:end + 1]
,即最长回文子串。
-
expand 方法:
expand
方法用来从给定的中心向两边扩展,找到最长的回文串。l
和r
分别是扩展的左右两个指针。- 当
l
和r
满足回文串条件时,向两边扩展,直到不满足回文串条件为止。 - 返回的是找到的回文串的起始索引
l + 1
和结束索引r - 1
。