Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.python
窮舉法ide
取出全部的子串組合,挨個判斷,返回最長的spa
class Solution(object): def isPalindrome(self, s, start, end): while start < end: if s[start] != s[end]: return False start += 1 end -= 1 return True def longestPalindrome(self, s): """ :type s: str :rtype: str """ max, left, right = 0, 0, 0 for i in range(len(s)): j = i+1 while j < len(s): if self.isPalindrome(s, i, j): if (j-i+1) > max: left, right = i, j max = j - i + 1 j += 1 print left, right, max return s[left:right+1]
雙指針兩邊擴展指針
遍歷指針爲i, j=i+1, i左移,j右移。判斷是否相等將長度,下標賦給臨時變量,最後切片返回。惟一的大坑。迴文字符串長度能夠是奇數也能夠是偶數。奇數的時候,內層循環從i-1開始。邊界條件也須要處理好。orm
class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ n = len(s) maxL, maxR, max = 0, 0, 0 for i in range(n): # 長度爲偶數的迴文字符串 start = i end = i + 1 while start >= 0 and end < n: if s[start] == s[end]: if end - start + 1 > max: max = end - start + 1 maxL = start maxR = end start -= 1 end += 1 else: break # 長度爲奇數的迴文子串 start = i - 1 end = i + 1 while start >= 0 and end < n: if s[start] == s[end]: if end - start + 1 > max: max = end - start + 1 maxL = start maxR = end start -= 1 end += 1 else: break return s[maxL:maxR+1]