手撕代码锻炼 5. 最长回文子串
作者:
liweidong
,
2023-03-19 17:14:07
,
所有人可见
,
阅读 34
/*
* 遍历每一个字符,i
* i为中心,向两边检测回文长度
* i-1,i为中心,向两边检测回文长度
* 取最大值,并记录该字符串
*/
#include <iostream>
using namespace std;
string longestStr(string s){
int max_len = 0; // 最大长度
string res; // 对应的字符串
int n = s.size();
// 遍历每一个字符
for(int i=0;i<n;i++){
// i为中心,向两边检测回文长度
int l = i-1, r = i+1;
while(l>=0 && r<=n-1 && s[l]==s[r]){
l--, r++;
}
if(r-l-1 > max_len){
max_len = r-l-1;
res = s.substr(l+1, max_len);
}
// i-1,i为中心,向两边检测回文长度
l = i-1, r = i;
while(l>=0 && r<=n-1 && s[l]==s[r]){
l--, r++;
}
if(r-l-1 > max_len){
max_len = r-l-1;
res = s.substr(l+1, max_len);
}
}
return res;
}
int main(){
string s = "cbbd";
string res = longestStr(s);
cout<<res<<endl;
return 0;
}