写这个代码我真的费了好大功夫,代码注释写的很详细,功能其实也很完整,具体咋理解题我就不写了,兄弟们自己看看吧。一定要把题读明白!!!!!!!!!
a = eval(input())#a拿来输入字符串个数
c=[]#建一个空列表存字符串
for i in range(a):
dd=input()
c.append(dd)#把字符串都存进去
for i in range(a):
b =c[i]
stop=False#写一个flag用于如果字符串有除了P A T 以外字符,直接输出停止
for j in range(len(b)):
if b[j] !="P" and b[j] !="A" and b[j] !="T":
print("NO")
stop=True#这个其实很关键哈,因为要跳出两层循环而并非只是对字符串每一个字符的遍历
break#break先终止对字符串的变量
if stop==True:
continue#再用continue跳出对这个字符串的判断,因为已经要输出no了,直接开始循环下一个,用continue
b=list(b)#把单个字符串转成列表才能执行下边的函数
if 'P' not in b or 'A' not in b or 'T' not in b:
print("NO")
continue#这点很关键哈,如果字符串里没有p a t 中的某个,就不能执行下标的三条命令,从而就会报错,呜呜呜本来都写好过了好久才发现
P=[i for i, x in enumerate(b) if x == 'P']#这仨是把字符串中p a t 的下标集合找出来
A = [i for i, x in enumerate(b) if x == 'A']
T = [i for i, x in enumerate(b) if x == 'T']
A1 = b.index('P')
A2 = b.index('T')
A3 = b.index('A')#找出下标,其实有点多余哈这三句
d1=0#d1是p之前a的个数
d2=0#d2是p t之间a的个数
d3=0#d3是t之后a的个数
if len(P)>1 or len(T)>1 or A1>A2 :#P T 个数超过1,直接结束
print('NO')
continue
for i in range(len(A)):###########这个for循环直接把' P T '这样的字符串三个位置的A的个数找到
if A[i]<A1:
d1=d1+1
elif A[i]>A1 and A[i]<A2:
d2=d2+1
elif A[i]>A2:
d3=d3+1
if (d1==d3 and d2==1) or (d1*d2==d3):#判断条件(d1==d3 and d2==1)是第二个要求,(d1*d2==d3)是第三个要求,这个建议自己理解,理解不透彻解题解不明白的
print('YES')
else:
print('NO')