什么是回文串>>>正着读反着读都一样的字符串。
做题前知识点补充:
from: https://www.cnblogs.com/ForXinYuanStudyPy/p/7625830.html
截图来自上面链接,其中我们方法一只需要用到红框内容。
本题我打算用两种方法来做,一种是比较低级的遍历搜索,一种是动态规划。但是穿插了一种从别的地方看到的方法,很容易理解,所以放上去了。
方法一:
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
maxlen = 0
answer =''
for i in range(len(s)):
for j in range(i,len(s)):
temp = s[i:j+1]
if temp==temp[::-1] and len(temp)>maxlen:
maxlen = len(temp)
answer = temp
return answer
是一次ac的没问题,但是很慢。超过了3.11%的提交用户。。。
稍微讲一下:从字符串从左到右开始遍历,对于遍历到的每一个i,j就从当前i开始一直到最后一个字符,
方法2:
来自:https://blog.csdn.net/u012560212/article/details/71708982
class Solution(object):
def longestPalindrome(self, s):
res = ""
for i in xrange(len(s)):
tmp = self.helper(s,i,i)
#odd case like aba
if(len(tmp)>len(res)):
res = tmp
tmp = self.helper(s,i,i+1)
#even case like abba
if(len(tmp)>len(res)):
res = tmp
return res
# get the longest palindrome, l, r are the middle indexes
# from inner to outer
def helper(self,s,l,r):
while l>=0 and r<len(s) and s[l]==s[r]:
l -=1
r +=1
return s[l+1:r]
方法3动态规划
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
maxlen = 0
answer = ''
matrix = [[0 for k in range(len(s))] for k in range(len(s))]
for j in range(len(s)):
for i in range(0,j+1):
if j-i<=1:
if s[i]==s[j]:
matrix[i][j] = 1
if j-i+1>maxlen:
maxlen = j-i+1
answer = s[i:j+1]
elif j-i>1:
if s[i]==s[j] and matrix[i+1][j-1]:
matrix[i][j] = 1
if j-i+1>maxlen :
maxlen = j-i+1
answer = s[i:j+1]
return answer
https://blog.csdn.net/bailang_zhizun/article/details/80538774
细节请参考上面链接
进阶的dp请参看上面链接。