回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
作者:LeetCode
链接:https://leetcode.cn/leetbook/read/array-and-string/conm7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution:
def longestPalindrome(self, s: str) -> str:
ans_len = 1 #回文子串长度初始值
#中心扩展算法
#从每一个位置mid出发,向两边扩散
maxLeft = 0 #记录最长回文子串的起点
maxRight = 0 #记录最长回文子串的终点
maxLen = 0 #记录最长回文子串的长度
for mid in range(len(s)):
left = mid - 1
right = mid + 1
#向左侧扩展,直到超过边界或遇到与中心字符不等跳出while循环
while(left >= 0 and s[left] == s[mid]):
left = left - 1
00
#向右侧扩展,直到超过边界或遇到与中心字符不等跳出while循环
while(right < len(s) and s[right] == s[mid]):
right = right + 1
ans_len = ans_len + 1
#同时向左右两侧扩展
while(left >= 0 and right < len(s) and s[left] == s[right]):
left = left - 1
right = right + 1
ans_len = ans_len + 2
if (ans_len > maxLen): #比较每次回文长度
maxLen = ans_len
maxLeft = left
maxRight = right
ans_len = 1 #because maxlen record longestPalindrome length,so need restore to initial value after each loop
return s[maxLeft+1:maxRight]