大概题目意思就是:给你一个只有小写字母和问号的字符串,可以在头或尾删除任意长度,得到一个字串,并且该字串要满足长度为偶数,前一半和后一半(问号可以匹配任意字符)相等,求这样的字串的最大长度,若不存在则输出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;
}