class Solution {
public:
string longestPalindrome(string s) {
int l = s.length();
int flag;
if(l < 2){ //长度为1/0直接返回
return s;
}
int maxl = 1; //最长字串初始化长度
int begin = 0;//最长字串开始位置
//dp
vector<vector<int>> dp(l, vector<int>(l));
for(int i = 0; i < l; i++){
dp[i][i] = 1;//长度为1的字串是回文子串 初始化
}
for(int L = 2; L <= l; L++){//定义回文子串的长度 从2开始 最长到n
for(int i = 0; i < l; i++){//左边界 右边界为左边界+长度-1
int j = i + L - 1;
if(j >= l){ //越界 break
break;
}
if(s[i] == s[j]){
if(j - i < 3){ //结束条件
dp[i][j] = 1;
}
else{
dp[i][j] = dp[i+1][j-1];//里层判断
}
}
else{
dp[i][j] = 0;
}
if(dp[i][j] && (L > maxl)){
maxl = L;
begin = i;
}
}
}
return s.substr(begin,maxl);
}
};
最长回文子串c++
最新推荐文章于 2024-05-30 18:30:18 发布