注意點
1、其實就是要求P之前的A的數量乘以PT之間A的數量等於T之後A的數量
2、注意PT中間等於零的情況
3、注意PT兩個字母:必須P在T之前出現,各有且僅有一次
代碼
#include<iostream>
#include<string>
using namespace std;
void checkPAT();
void checkPAT()
{
string str;
int pos_P = -1, pos_T = -1, state = 0;
int i, j, len;
int num[3];
cin >> str;
len = str.size();
num[0] = 0;
num[1] = 0;
num[2] = 0;
for (i = 0; i < len; i++)
{
if (str[i] != 'P' && str[i] != 'A' && str[i] != 'T')
{
cout << "NO\n";
return;
}
if (str[i] == 'A')
num[state]++;
else if (str[i] == 'P')
{
if (pos_P != -1)
{
cout << "NO\n";
return;
}
pos_P = i;
state++;
}
else if (str[i] == 'T')
{
if (pos_T != -1)
{
cout << "NO\n";
return;
}
pos_T = i;
state++;
}
}
if (pos_P == -1 || pos_T == -1)
{
cout << "NO\n";
return;
}
if (pos_P >= pos_T)
{
cout << "NO\n";
return;
}
if (num[1] == 0)
{
cout << "NO\n";
return;
}
if (num[0] * num[1] == num[2])
cout << "YES\n";
else cout << "NO\n";
return;
}
int main()
{
int n, i;
cin >> n;
for (i = 0; i < n; i++)
checkPAT();
//while (1)
//{ }
return 0;
}