题目解析:①只能有一个P和一个T;②PAT的前后顺序不能变;③可以有多个A,但是PT之间要有至少一个A,且要满足P之前A的个数*PT之间A的个数 = T之后A的个数
#include <iostream>
using namespace std;
bool test(string st){
if(st.size()<3) return false;
int pLoc,tLoc;
int Pnum=0,Tnum=0;
for(int i=0;i<st.size();++i){
//如果不是P,A,T,则直接返回false
if(st[i]!='P'&&(st[i]!='T'&&st[i]!='A')) return false;
else{
//记录P,T的个数和位置,只有P,T只有一个时才用到位置信息
if(st[i]=='P'){
pLoc = i;
Pnum++;
}
if(st[i]=='T'){
tLoc = i;
Tnum++;
}
}
}
if(Pnum!=1 || Tnum!=1) return false;
if(pLoc>tLoc) return false;//若P,T的顺序为TP,则答案错误
int left = pLoc;//P之前A的个数
int middle = tLoc-pLoc-1;//P,T之间A的个数
int right = st.size()-1-tLoc;//T之后A的个数;
if(middle>=1 && right == left*middle){
return true;
}
return false;
}
//题目解析: 只能有一个P,T;PAT的前后顺序不能变,
//可以有多个A,但是要满足:PT之间要有A,且P之前A的个数同PT之间A的个数乘积等于T之后A的个数
int main(){
int n;
cin>>n;
for(int i=0;i<n;++i){
string st = "";
cin>>st;
if(test(st)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}