查找字符串最長迴文
Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad"
Output: "bab"
Note: “aba” is also a valid answer.
Example:
Input: "cbbd"
Output: "bb"
思路
- 迴文有奇迴文和偶迴文,
abcba
是奇迴文,abccba
是偶迴文 - 迴文都是中心對稱,找到對稱點後,同時向前後尋找回文的最長串即可
- 奇迴文和偶迴文可以歸爲同一種情況,即
abcba
以c
爲對稱點,abccba
以cc
爲對稱點,但爲了代碼可讀性,可以分開討論
代碼
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
self.maxlen = 0
self.retstr = ''
if len(s) < 2:
return s
for i in range(len(s)):
self.__find_palindrome(s, i, i) #奇迴文
self.__find_palindrome(s, i, i+1) #偶迴文
return self.retstr
def __find_palindrome(self, s, j, k):
while j >= 0 and k < len(s) and s[j] == s[k]:
j -= 1
k += 1
if self.maxlen < k - j + 1:
self.maxlen = k - j + 1
self.retstr = s[j+1:k]
本題以及其它leetcode題目代碼github地址: github地址