本题主要就是需要知道P前面A数量乘上PT中间A的数量等于T后面A的数量,但是中间必须有A。
#include<stdio.h>
#include<string.h>
#include <iostream>
using namespace std;
int main()
{
char a[100];
int n;
cin >> n;
while (n)
{
n--;
cin >> a;
int flag = 1;
int len = strlen(a);
int numberP = 0, numberT = 0;
int wp = -1, wa = -1;
int fpa = 0;int fpz = 0;int fph = 0;
for (int i = 0;i < len;i++) {
if (a[i] == 'P') {
wp = i;
numberP++;
if (numberP > 1) {//只能有一个P
flag = 0;
cout << "NO" << endl;
break;
}
}
else if (a[i] == 'A') {
if (wp == -1) {
fpa++;
}
else if (wa == -1) {
fpz++;
}
else {
fph++;
}
}
else if (a[i] == 'T') {//只能有一个T
if (wp == -1) {
flag = 0;
cout << "NO" << endl;
break;
}
wa = i;
numberT++;
if (numberT > 1) {
flag = 0;
cout << "NO" << endl;
break;
}
}
else {
flag = 0;
cout << "NO"<<endl;
break;
}
}
if (flag) {
if (numberP == 0 || numberT == 0)
cout << "NO" << endl;
if (fpz == 0) {//中间必须有A
cout << "NO" << endl;
}else if (fph == fpa * fpz)//前面A的数量*中间等于后面的数量
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}
}