给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb
看到此题时,只想到了暴力破解法,python刚学,自己硬憋了两个多小时才把程序写好,最后提交各种疏漏。改完之后提交上去给了时间超时,感觉心好累。
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
l = len(s)
if l == 0: #排除空字符串
return s
k = [0, 1] # 用来存储回文的起始位置和长度
i = 2
while i <= l: #回文长度
j = 0
while j + i <= l: #截取各个回文长度的字符串
ss = s[j:j + i]
ll = len(ss)
flag = 0
for m in range(ll // 2): #判断是否是回文
flag = 1
if ss[m] != ss[ll - 1 - m]:
flag = 0
break
if flag == 1:
k[0] = j
k[1] = i
break
j += 1
i += 1
if k == [0,1]: #排除长度是1的回文
return s[0]
else:
return s[k[0]:k[0] + k[1]]
ts = Solution()
mm = ts.longestPalindrome('bcbdv')
print(mm)