題目要求函數
思路:spa
因此能夠編寫一個函數get_str,給定已知迴文子字符串的最小下標和最右下標,而後橫向擴散去尋找回文字符串。code
那麼如何肯定要給get_str什麼樣的下標呢,能夠經過遍歷字符串sblog
每遍歷到一個字符,有兩種狀況字符串
class Solution: def longestPalindrome(self, s: str) -> str: def get_str(left, right, s): while left >= 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 # 返回left+1和right-1是由於最後一次while循環會對left多減一,對right多+1,這時的left和right左右會多各多算一個字符 return left + 1, right - 1 start, end = 0, 0 for i in range(len(s)): # 兩種狀況 left1, right1 = get_str(i, i, s) left2, right2 = get_str(i, i + 1, s) # 若是搜索到比當前迴文子字符串更長的,就要更新 if right1 - left1 > end -start: start, end = left1, right1 if right2 - left2 > end -start: start, end = left2, right2 return s[start:end + 1]
完整代碼get
class Solution: def longestPalindrome(self, s: str) -> str: def get_str(left, right, s): while left >= 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return left + 1, right - 1 start, end = 0, 0 for i in range(len(s)): left1, right1 = get_str(i, i, s) left2, right2 = get_str(i, i + 1, s) if right1 - left1 > end -start: start, end = left1, right1 if right2 - left2 > end -start: start, end = left2, right2 return s[start:end + 1]