【leetcode】5. 最长回文子串
文章目录
- 题目
- 题解
- 1. 暴力解法
- 2. 中心扩散
- 3. 动态规划
题目
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的 回文 子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
题解
1. 暴力解法
class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""n = len(s)dp = [0] * (n)dp[0] = 1for i in range(1, n):for j in range(i):if self.isHui(j, i, s):dp[i] = i - j + 1breakindex_max = dp.index(max(dp))# print(dp)# print(index_max)# print(s[index_max - max(dp) + 1:index_max + 1])return s[index_max - max(dp) + 1:index_max + 1]def isHui(self, slow, fast, st):while slow < fast:if st[slow] == st[fast]:slow += 1fast -= 1else:return Falsereturn True
2. 中心扩散
class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""if not s:return ""start, end = 0, 0def expend(l, r):while l >= 0 and r < len(s) and s[l] == s[r]:l -= 1r += 1return l + 1, r - 1for i in range(len(s)):l1, r1 = expend(i, i)l2, r2 = expend(i, i + 1)if r1 - l1 > end - start:start, end = l1, r1if r2 - l2 > end - start:start, end = l2, r2return s[start: end + 1]
链接:
3. 动态规划