需求
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
解决方法:滑动循环
- 回文字符:正读和反读都一样的字符串。当不存在时,返回字符串的最后一个字符;
- 根据字符串的长度,利用滑动窗口,每循环一次减少1位,得到所有的子串,且从最长子串开始,逐个进行反转对比,如果相等则直接返回,即为最大回文子串。该方法效率一般,容易想到,好理解;
- 参考代码
def longest_palindrome(s):
mlen = len(s)
if mlen == 0:
return ""
while True:
i = 0
while i + mlen <= len(s):
sl = s[i:i + mlen]
sr = sl[::-1]
if sl == sr:
return sl
i = i + 1
mlen = mlen - 1
s = 'bdababaa'
print(longest_palindrome(s))
ababa