用string+O(n3)暴力,会TLE
#include<bits/stdc++.h>
using namespace std;
bool chks(string str){
for(int i=0;i<(str.size())/2;i++)
if(str[i]!=str[str.size()-i-1])
return false;
return true;
}
bool chk(string str,int start,int lenth){
if(start+lenth>str.size())return false;
str=str.substr(start,lenth);
return chks(str);
}
int main(){
char c;
string s="",str="";
vector<int>p;
int maxl=0,maxst,maxed;
string maxs="";
while(scanf("%1c",&c)!=EOF){
str+=c;
if(c>='a'&&c<='z'){
s+=char(c);
p.push_back(str.size()-1);
}
if(c>='A'&&c<='Z'){
s+=char(c+'a'-'A');
p.push_back(str.size()-1);
}
// cout<<c<<" "<<str<<endl;
}
// cout<<s<<endl;
for(int st=0;st<s.size();st++){
for(int l=1;l<=s.size()-st;l++){
// cout<<s.substr(st,l)<<endl;
if(chk(s,st,l)&&l>maxl){
maxl=l;
maxs=s.substr(st,l);
// cout<<"!"<<maxs<<endl;
maxst=st;
maxed=st+l-1;
}
}
}
cout<<maxl<<endl;
for(int i=p[maxst];i<=p[maxed];i++){
cout<<str[i];
}
return 0;
}
为何呢???