题目中的 PAT 分布是有规律可寻的,即把A分成三部分:P前面 * P和T中间 = T后面
例如:
PAT 0 * 1 = 0
PAAT 0 * 2 = 0
AAPATAA 2 * 1 = 2
AAPAATAAAA 2 * 2 = 4
所以先判断P和T是否存在,并且个数为1,再对A进行判断。
#include <iostream>
using namespace std;
bool judge(string s)
{
int a[5] = {0};
for(int i = 0; i < s.length(); i++) {
if(s[i] != 'P' && s[i] != 'A' && s[i] != 'T') {
return false;
}
if(s[i] == 'P') {
a[0]++;
if(a[1] != 0 || a[0] > 1) {
return false;
}
} else if(s[i] == 'T') {
a[1]++;
if(a[0] == 0 || a[1] > 1) {
return false;
}
} else {
if(a[0] == 0 && a[1] == 0) {
a[2]++;
} else if(a[0] != 0 && a[1] == 0) {
a[3]++;
} else {
a[4]++;
}
}
}
if(a[0] == 0 || a[1] == 0 || a[3] == 0) {
return false;
} else if(a[3] * a[2] != a[4]) {
return false;
} else {
return true;
}
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++) {
string s;
cin >> s;
if(judge(s)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}