问题描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
思路:分别取字符串中每一个字符,以其为中心,左右匹配最大回文序列
代码:
class Solution:
def dual_str(self,index,s):
flag=1
ss=s[index]
ff=0
if s[index]==s[index+1]:
ff=1
r_index=index+1
l_index=index
ss=s[index]
while flag:
if (r_index+1)<len(s)and(l_index-1)>=0:
r=s[r_index+1]
l=s[l_index-1]
r_index+=1
l_index-=1
if r==l:
ss+=r
else:
flag=0
else:
flag=0
OU=1
if ff==0:
ss=''
ss=ss[::-1]+ss
return ss,OU
def per_str(self,index,s):
flag=1
OU=0
r_index=index
l_index=index
ss=s[index]
while flag:
if (r_index+1)<len(s)and(l_index-1)>=0:
r=s[r_index+1]
l=s[l_index-1]
r_index+=1
l_index-=1
if r==l:
ss+=r
else:
flag=0
else:
flag=0
ss=ss[::-1]+ss[1:]
return ss,OU
def longestPalindrome(self,s):
ss=''
if len(s)==1:
return s[0]
for i in range(len(s)-1):
temp,OU=self.per_str(i,s)
if len(ss)<len(temp):
ss=temp
temp,OU=self.dual_str(i,s)
print(temp)
if len(ss)<len(temp) or (len(temp)==1 and OU==1):
ss=temp
return ss
时间、空间复杂度都不管了,终于实现了,老泪纵横。。。