给你一个字符串 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);
}
};