题目描述

分析:找出子串中最长的回文串,选定一个中心,从中心向两边遍历
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
int maxLen=0;
for(int i=0;i<s.size();++i){
int j;
for(j=1;i-j>=0&&i+j<s.size()&&s[i+j]==s[i-j];++j);//以当前字符为回文中心查找最长回文子串
maxLen=max(maxLen,2*j-1);
for(j=0;i-j>=0&&i+j+1<s.size()&&s[i-j]==s[i+1+j];++j);//以当前字符为回文中心左侧字符查找最长回文子串
maxLen=max(maxLen,2*j);
}
printf("%d",maxLen);
return 0;
}
本文介绍了一种通过中心扩展法来寻找字符串中最长回文子串的有效算法。该算法遍历每个字符作为回文串的中心,向两侧扩展判断是否构成回文,最终返回最长的回文子串长度。
299

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



