给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
1 | 输入: "babad" |
示例 2:
1 | 输入: "cbbd" |
方法一:暴力法
1 | class Solution { |
复杂度分析:时间复杂度为O(n^3),空间复杂度为O(1)。其中,n为字符串s的长度。
方法二:动态规划
状态转移方程:
$$
\mathrm{dp[i][j]} =
\begin{cases}
false, & \mathrm{s[i] \ne s[j]} \\
true, & \mathrm{s[i] = s[j]\ and\ j \le i + 1} \\
dp[i+1][j-1], &\mathrm{s[i] = s[j]\ and\ i + 2 \le j}
\end{cases}
$$
1 | class Solution { |
复杂度分析:时间复杂度为O(n^2),空间复杂度为O(n^2)。其中,n为字符串s的长度。
方法三:中心扩展法
1 | class Solution { |
复杂度分析:时间复杂度为O(n^2),空间复杂度为O(1)。其中,n为字符串s的长度。