给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
> 动态规划
class Solution {
public:
string longestPalindrome(string s) {
int maxlenth = 0;
int left = 0;
int right = 0;
vector<vector<int>> dp(s.size(),vector<int>(s.size(),1));
for(int i = s.size()-1;i >= 0;i--){
for(int j = s.size()-1;j > i;j--){
if(s[i] == s[j]){
dp[i][j] = dp[i+1][j-1];
}
else{
dp[i][j] = 0;
}
if (dp[i][j] && j - i + 1 > maxlenth) {
maxlenth = j - i + 1;
left = i;
right = j;
}
}
}
return s.substr(left, right - left + 1);
}
};
> 双指针
class Solution {
public:
int left = 0;
int right = 0;
int maxLength = 0;
string longestPalindrome(string s) {
int result = 0;
for (int i = 0; i < s.size(); i++) {
extend(s, i, i, s.size()); // 以i为中心
extend(s, i, i + 1, s.size()); // 以i和i+1为中心
}
return s.substr(left, maxLength);
}
void extend(const string& s, int i, int j, int n) {
while (i >= 0 && j < n && s[i] == s[j]) {
if (j - i + 1 > maxLength) {
left = i;
right = j;
maxLength = j - i + 1;
}
i--;
j++;
}
}
};
标签:子串,right,string,int,size,回文,最长,dp,left
From: https://www.cnblogs.com/lihaoxiang/p/17547853.html