给你一个字符串 s
,找到 s
中最长的回文子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
标签:
['字符串', '动态规划']难度:Medium
喜欢:5524- 枚举每一个字符串
$[i, j]$ - 判断
$[i,j]$ 是否是回文串
枚举字符串
判断回文串
总时间复杂度 :相乘 得
搜索过程中,更新最长子串长度
class Solution {
public String longestPalindrome(String s) {
char[] sc = s.toCharArray();
int n = s.length();
String res = "";
if (n == 0) return res;
boolean f[][] = new boolean[n][n];
for (int len = 1; len <=n ; len++) {
for (int i=0, j; (j = i+len-1) < n; i++){
if (len == 1) f[i][j] = true;
else if (len == 2 && sc[i] == sc[j]) f[i][j] = true;
else {
f[i][j] = sc[i] == sc[j] && f[i+1][j-1];
}
if (f[i][j] && res.length() < len) {
res = s.substring(i, j + 1);
}
}
}
return res;
}
}
从中心向两边扩展
枚举每一个中心时间复杂度
向两边扩展
总共:
516.最长回文子序列