大概题目意思就是:给你一个只有小写字母和问号的字符串,可以在头或尾删除任意长度,得到一个字串,并且该字串要满足长度为偶数,前一半和后一半(问号可以匹配任意字符)相等,求这样的字串的最大长度,若不存在则输出0。
字符串长度不超过5000,时间复杂度可以到n方。
思想:利用双循环:第一层循环遍历该字串长度,第二层从前往后遍历,看是否存在该长度的字串
附上代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
int main(){
int t;cin>>t;
while(t--){
cin>>s;
int ans=0;
for(int d=1;d<=s.length()/2;d++){ //第一层遍历长度
int t=0;
for(int i=0;i<s.length()-d;i++){ //第二层从前往后遍历,注意这里的i是不回头的
if(s[i]==s[i+d]||s[i]=='?'||s[i+d]=='?'){
t++;
if(t==d){
ans=max(ans,t);break;//该长度找到就可以break了
}
}
else t=0;}
}
cout<<ans*2<<endl;
}
return 0;
}