PAT1003打卡-0909
#include <iostream>
#include<string>
#include<vector>
using namespace std;
bool chapter1(string a)//首先进行第一层级的判断,保证字符串中只有PAT
{
bool flag1=true;
for(int i=0;i<a.size();i++)
{
if(a[i]!='P'&&a[i]!='A'&&a[i]!='T')
flag1=false;
}
return flag1;
}//至此保证程序只含P,A,T
bool chapter2(string a)//保证PT的个数
{
bool flag1=false;
bool flag2=false;
int p=0,t=0;
flag1=chapter1(a);//满足条件1的情况下
if(flag1==true)
{
for(int i=0;i<a.size();i++)
{
if(a[i]=='P')
p++;
if(a[i]=='T')
t++;
}
if(p==1&&t==1)
{
for(int i=0;i<a.size();i++)
{
if(a[i]=='P')
p=i;
if(a[i]=='T')
t=i;
}
if(p<t)
flag2=true;
}
}
return flag2;
}//至此保证程序只含一个P和一个T
bool chapter3(string a)//在第一个层级的基础上,进行第二层级的判断,保证XPATX
{
bool flag1=false;
bool flag2=false;
int n=a.size();
int p=0,t=0;
flag1=chapter2(a);//判断是否只含P,A,T且P,T只有一个
if(flag1==true)
{
for(int i=0;i<n;i++)
{
if(a[i]=='P')
p=i;
if(a[i]=='T')
t=i;
}
if(p<t-1&&p==n-t-1)
flag2=true;
}
return flag2;
}
bool chapter4(string a)//判断条件3
{
bool flag1=false;
bool flag2=false;
int n=a.size();
int p=0,t=0;
flag1=chapter2(a);
if(flag1==true)
{
for(int i=0;i<n;i++)
{
if(a[i]=='P')
p=i;
if(a[i]=='T')
t=i;
}
while(p<t-2)
{
t--;
n=n-p-1;
}
string b;
for(int i=0;i<n;i++)
{
if(i==p)
b=b+'P';
else if(i==t)
b=b+'T';
else
b=b+'A';
}
flag2=chapter3(b);
}
return flag2;
}
int main()
{
int n;
cin>>n;
vector<string> v(n);
for(int j=0;j<n;j++)
{
cin>>v[j];
}
for(int j=0;j<n;j++)
{
if(chapter3(v[j])||chapter4(v[j]))
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
return 0;
}