题目描述:
给你一个字符串
s
,找到s
中最长的回文子串。
示例1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例2:
输入:s = "cbbd"
输出:"bb"
示例3:
输入:s = "a"
输出:"a"
示例4:
输入:s = "ac"
输出:"a"
提示
1 <= s.length <= 1000
-
s
仅由数字和英文字母(大写和/或小写)组成
思路
动态规划
代码示例:
char * longestPalindrome(char * s){
int dp[1001][1001] = {0};
int n = strlen(s);
int len = 0, i = 0;
int start = 0, end = 0;
for(len = 0; len < n; ++len) {
for(i = 0; i + len < n; ++i) {
int j = i + len;
if(len == 0) {
dp[i][j] = 1;
} else if(len == 1) {
dp[i][j] = s[i] == s[j];
} else {
dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1];
}
if(dp[i][j] && (len > end - start)) {
start = i;
end = j;
}
}
}
s[end + 1] = '\0';
return s + start;
}
网友评论