class Solution:
def longestPalindrome(self, s: str) -> str:
lenStr = len(s)
maxLen = 0
tempLen = 0
maxStr = ''
leftDigit = 0
rightDigit = 0
if lenStr == 1 or s =='':
return s
# 防止接下来的判断造成溢出,lenStr-1
for i in range(lenStr-1):
leftDigit = rightDigit = i
#先移动右坐标到与s[i]重复的最后一位
while s[rightDigit+1] == s[i]:
rightDigit += 1
if rightDigit == lenStr-1:
break
#左右坐标开始同时移动,无法组成回文串停止
while leftDigit > 0 and rightDigit < lenStr-1:
leftDigit -= 1
rightDigit += 1
if s[leftDigit] != s[rightDigit]:
leftDigit += 1
rightDigit -= 1
break
#记录长度并更新
tempLen = rightDigit -leftDigit + 1
if tempLen > maxLen:
maxLen = tempLen
maxStr = s[leftDigit:rightDigit+1]
return maxStr
s1 = Solution()
print(s1.longestPalindrome('cccc'))
有两个地方试了好多遍,一是字符串溢出,二是最开始的时候移动右坐标直到找到重复的最后一位。
刚刚看到一个更简洁的实现:其中假定了两种可能的中心情况。https://leetcode-cn.com/problems/longest-palindromic-substring/solution/python-zhong-xin-kuo-san-by-qinyu-c-g0pt/