#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
scanf("%d", &n);
string str;
int left, mid, right;
int flag;
for(int i=0; i<n; i++){
flag = 0;
cin >> str;
for(int j=0; j<str.length(); j++){
if(str[j]!='P' && str[j]!='A' && str[j]!='T'){
printf("NO\n");
flag = 1;
break;
}
}
if(flag){
continue;
}
left = str.find("P");
mid = str.find("T") - str.find("P") - 1;
right = str.length() - str.find("T") - 1;
if(mid == 1){
if(left == right){
printf("YES\n");
}else{
printf("NO\n");
}
}else if(mid == 0){
printf("NO\n");
}else{
while(mid != 1){
mid--;
right -= left;
}
if(left == right){
printf("YES\n");
}else{
printf("NO\n");
}
}
}
return 0;
}
越来越觉得PAT的题目模糊不清,也可能是我想的太多了,这题看了足足有十分钟才弄懂题目的意思。
算是一个简单模拟题,首先遍历一次字符串,如果发现有不是PAT这三个字母的字符则直接输出NO,开始下一次输入。
根据题目可以发现规律,如果PT中间只有一个A,则P的左边和T的右边的A数量要相等才为正确,如果PT中间没有A,则错误。
比较麻烦的是第三个条件,当PT中间A的数量大于一个时,此时可以根据题目条件向前递推,一直到PT中间A数量为一个的时候,然后判断此时是否正确。