给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
通过次数828,041提交次数2,304,523
请问您在哪类招聘中遇到此题?
解法1:区间dp
class Solution {
private:
#define LEN 1001
#define max(a,b) (a) > (b) ? (a) : (b)
int dp[LEN][LEN];
public:
string longestPalindrome(string s) {
int start = 0,end = 0,ma = 1;
memset(dp,0,sizeof(dp));
for(int i = 0;i<s.length();i++) dp[i][i] = 1;
for(int len = 1;len < s.length(); len++) {
for(int i = 0 ,j = len; j < s.length(); i++,j++){
if(s[i] == s[j]){
if(len == 1) dp[i][j] = 2;
else if(dp[i+1][j-1]) dp[i][j] = dp[i+1][j-1] + 2;
else dp[i][j] = 0;
if(ma < dp[i][j] ){
start = i;
end = j;
ma = dp[i][j];
}
}
else dp[i][j] = 0;
}
}
return s.substr(start,end-start+1);
}
};
使用动态规划解决最长回文子串问题

本文介绍了一种解决力扣上的一道经典问题——找出字符串中最长的回文子串的方法。通过区间动态规划(dp)实现,遍历所有可能的子串,当字符相等时更新状态转移矩阵,并记录最长回文子串的起始位置和长度。最终返回最长回文子串。
466

被折叠的 条评论
为什么被折叠?



