PAT 乙级 1003 我要通过
分析:
xPATx类都可以通过,x必须是空字符或者A,则AAPATAA等都可通过,PT中间一个A,左右等量A,0到多个
如果aPbTc正确,则aPbATca也正确,举几个例子可以发现,如果P左边A的数量是m,PT之间A的数量是n,P之后到结束A的数量为q,则有关系q = m * n;
所以需要记录P,A,T各自出现的数量,这种需要养成使用map的习惯,建立map<char, int> ,比较方便。
代码为
// PAT 乙级 1003.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
int n, p = 0, t = 0;
string s;
cin >> n;
for (int i = 0; i < n; i++) {
map<char, int> map;
cin >> s;
for (int j = 0; j < s.length(); j++) {
map[s[j]]++;
if (s[j] == 'P') p = j;
if (s[j] == 'T') t = j;
}
if (map['P'] == 1 && map['T'] == 1 && map['A'] != 0 && t - p != 1 && map.size() == 3 && p * (t - p - 1) == s.length() - t - 1) {
cout << "YES\n";
}
else {
cout << "NO\n";
}
}
return 0;
}