题目描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
从字符串中间分别向两侧查找,每找到一个回文子串,将其和其长度存储到字典中,再找出最长的子串。
修改了n次之后的代码:
class Solution:
def longestPalindrome(self, s: str) -> str:
s='adda'
s1=''
string1,string2={},{}
length=len(s)
mid=int(length/2)
while mid>=1 :
s1=s[mid]
m,n=mid-1,mid+1
while m>=0 and s[m]==s[n]:
s1=s[m]+s1+s[n]
m,n=m-1,n+1
l1=len(s1)
string1[l1]=s1
mid=mid-1
mid=int(length/2)
while mid<length :
s1=s[mid]
m,n=mid-1,mid+1
while n<length and s[m]==s[n]:
s1=s[m]+s1+s[n]
m,n=m-1,n+1
l2=len(s1)
string2[l2]=s1
mid=mid+1
s2=''
length=len(s)
mid=int(length/2)
while mid>=1:
m,n=mid-1,mid
while m>=0 and s[m]==s[n]:
s2=s[m]+s2+s[n]
m,n=m-1,n+1
l1=len(s2)
string1[l1]=s2
mid=mid-1
mid=int(length/2)
while mid<length:
s2=''
m,n=mid,mid+1
while n<length and s[m]==s[n]:
s1=s[m]+s2+s[n]
m,n=m-1,n+1
l1=len(s2)
string2[l1]=s2
mid=mid+1
num=[]
for name in string1.keys():
num.append(name)
for name in string2.keys():
num.append(name)
if max(num) in string1.keys():
return(string1[max(num)])
else:
return(string2[max(num)])
s=Solution()
print(s.longestPalindrome('abcbcbcbabefggyhtre'))
执行结果: