/*
将给定的一个字符串分解成ABABA 或者 ABABCAB的形式!
思路:暴力枚举A, B, C串!
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
string str;
char ch[55];
int main(){
int t;
scanf("%d", &t);
getchar();
while(t--){
char cc;
int cnt=0;
scanf("%c", &cc);
while(cc!='\n'){
if((cc>='A' && cc<='Z' || cc>='a' && cc<='z'))
ch[cnt++]=cc;
scanf("%c", &cc);
}
ch[cnt]='\0';
str=string(ch);
int len=strlen(ch);
bool flag=false;
for(int i=1; i<len/2; ++i){
string A=str.substr(0, i);
for(int j=1; j<len/2; ++j){
if(i+j>len/2) break;
string B=str.substr(0+i, j);
if(A==B) continue;
int ll=i;
int k=i+j, x;
for(x=0; x<ll && k<len; ++k, ++x)
if(A[x] != ch[k])
break;
if(x==ll){
k=i+j+i;
ll=j;
for(x=0; x<ll && k<len; ++k, ++x)
if(B[x] != ch[k])
break;
if(x==ll){
ll=i;
k=i+j+i+j;
for(x=0; x<ll && k<len; ++k, ++x)
if(A[x] != ch[k])
break;
if(x==ll && k==len)
flag=true;
if(!flag){
k=i+j+i+j;
ll=j;
int m=len-1;
for(x=ll-1; x>=0 && m>k; --m, --x)
if(B[x] != ch[m])
break;
if(x==-1){
ll=i;
for(x=ll-1; x>=0 && m>k; --m, --x)
if(A[x] != ch[m])
break;
if(x==-1){
string C=str.substr(k, m-k+1);
if(A!=C && B!=C)
flag=true;
}
}
}
}
}
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3961027.html,如需转载请自行联系原作者