最长回文子串
问题简述
给你一个字符串 s,找到 s 中最长的回文子串。思路1:动态规划
状态定义:
dp[i][j] := 子串 s[i:j] 是否为回文串;状态转移方程:
dp[i][j] := dp[i+1][j-1] == True 且 s[i] == s[j];初始状态
单个字符:
dp[i][j] := True当i == j两个连续相同字符:
dp[i][j] := True当j == i + 1 && s[i] == s[j]
动态规划并不是最适合的解,这里仅提供一个思路;
如果要使用动态规划解本题,如何循环是关键,因为回文串的特点,从“双指针”的角度来看,需要从中心往两侧遍历,这跟大多数的 dp 问题略有不同;
思路2:模拟-中心扩散(推荐)
按照回文的定义,遍历每个字符作为中点,向两边扩散;
注意奇数和偶数两种情况;
Last updated