1003 我要通过! (20 分)

一、题目

1003 我要通过! (20 分)_第1张图片
1003 我要通过! (20 分)_第2张图片

二、题解

1- python题解

N = int(input())
for n in range(N):
    s = input()
    left=middle=right=p=t=0
    p_flag=t_flag=is_not_legel=False
    for i in range(len(s)):
        if(s[i] == 'P' and t_flag == False):
            p += 1
            p_flag = True
        elif(s[i] == 'T' and p_flag == True):
            t += 1
            t_flag = True
        elif(s[i] == 'A'):
            if(not p_flag and not t_flag):
                left += 1  # record the number of A in front of P
            elif(p_flag and t_flag):
                right += 1  # record the number of A behind T
            else:
                middle += 1  # record the number of A between P and T
        else:
            is_not_legel = True  # exit not legel char
            break
    if(p != 1 or t != 1 or middle == 0 or is_not_legel or left * middle != right):
        print("NO")
    else:
        print("YES")

三、测试点分析

1- 这里最后一个条件的意思是,假设我左边有a个A,中间有b个A,右边有c个A,那么它们需要满足的条件就是: a * b = c

2- P和T的数量仅且仅有一个

3- A的数量至少为1个

4- 不能出现除了‘P’、‘A’、‘T’之外的其它字符

满足以上4个条件即可AC

你可能感兴趣的:(PAT,乙级,编程题)