题目描述
分析输入输出我们知道:只能有一个P一个T,中间末尾和开头可以随便插入A。但是必须满足开头的A的个数 * 中间的A的个数 = 结尾的A的个数,而且P和T之间不能没有A
C++解法
#include<iostream>
#include<map>
using namespace std;
int main(){
int n,p=0,t=0;
string s;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
map<char,int> m;
for(int j=0;j<s.size();j++){
m[s[j]]++;
if(s[j]=='P') p=j;
if(s[j]=='T') t=j;
}
if(m['P']==1&&m['A']!=0
&&m['T']==1&&m.size()==3
&&t-p!=1&&p*(t-1-p)==s.length()-t-1){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}
python解法
n = eval(input())
for i in range(n):
s = input()
n_p = s.count('P')
n_a = s.count('A')
n_t = s.count('T')
if sum([n_p, n_a, n_t]) != len(s):
print('NO')
elif n_p != 1 or n_t != 1:
print('NO')
elif s.find('P') > s.find('T'):
print('NO')
else:
l_a = m_a = r_a = 0
flag_p = flag_t = False
for i in s:
if i == 'P':
flag_p = True
elif i == 'T':
flag_t = True
else:
if not (flag_p or flag_t):
l_a += 1
elif flag_p and not flag_t:
m_a += 1
elif flag_p and flag_t:
r_a += 1
if m_a == 0:
print('NO')
elif l_a * m_a == r_a:
print('YES')
else:
print('NO')