警示后人+疑问 string会TLE
查看原帖
警示后人+疑问 string会TLE
678625
shicj楼主2023/8/30 19:30

用string+O(n3)O(n^3)暴力,会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;
}

为何呢???

2023/8/30 19:30
加载中...