Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd"
Output: "bb"
解法1:参考 [LeetCode]题解(python):005-Longest Palindromic Substring
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
n=len(s)
if n==1 or n==0:
return s
if n==2:
if s[0]==s[1]:
return s
else:
return s[0]
max_length=1
ans=s[0]
i=0
while i<n:
j=i+1
while j<n:
if s[i]==s[j]:
j+=1
else:
break
k=0
while i-k-1>=0 and j+k<=n-1:
if s[i-k-1]!=s[j+k]:
break
k+=1
if j-i+2*k>max_length:
max_length=j-i+2*k
ans=s[i-k:j+k]
# if j+k==n-1:
# break
i=j
return ans
解法2:参考sample 52 ms submission
class Solution:
def longestPalindrome(self, s):
if s == s[::-1]:
return s
Len, start = 1, 0
for i in range(1, len(s)):
c, d = i - Len, i + 1
if c >= 1:
x = s[c - 1:d]
if x == x[::-1]:
start = c - 1
Len += 2
continue
if c >= 0:
x = s[c:d]
if x == x[::-1]:
start = c
Len += 1
return s[start:start + Len]