1003 我要通过

 笔记+思路:

 

 代码:

# 得到“答案正确”的条件是:
# 判断输入满足正确答案
# 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
# 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
# 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串

# 已经确定有P和T 元素,P的序号 T的序号,元素长度
def check(element, P, T, number):
    left_true = 0
    left_false = 0
    right_true = 0
    right_false = 0
    middle_true = 0
    middle_false = 0
    # 记左侧数
    for m in range(0, P):
        if element[m] == 'a' or element[m] == 'b' or element[m] == 'c' or element[m] == 'A':
            left_true += 1
        else:
            left_false += 1
    for m in range(T + 1, number):
        if element[m] == 'a' or element[m] == 'b' or element[m] == 'c' or element[m] == 'A':
            right_true += 1
        else:
            right_false += 1
    for m in range(P + 1, T):
        if element[m] == 'a' or element[m] == 'b' or element[m] == 'c' or element[m] == 'A':
            middle_true += 1
        else:
            middle_false += 1
    #     判别
    #     有错误值
    if left_false + right_false + middle_false > 0 or middle_true == 0:
        return False
    elif left_true == 0 and right_true == 0:
        return True
    elif left_true * middle_true == right_true:
        return True
    else:
        return False


# 首先输入多少个字符串
Q = int(input())
arr = []
flag = False
count = 0

for i in range(Q):
    # rstrip:删除 string 字符串末尾的指定字符后生成的新字符串 默认删除空格
    arr.append(list(map(str, input().rstrip().split("\n"))))
for i in range(len(arr)):
    test = str(arr[i])
    # 第i条数据
    test1 = test.strip("['").strip("]'")
    #     开始判定 如果PT都没有直接报错
    if test1.find('P') != -1 and test1.find('T') != -1:
        a = test1.index('P')
        b = test1.index('T')
        # 进行判定
        flag = check(test1, a, b, len(test1))
    else:
        flag = False
    if flag and i != Q - 1:
        print("YES")
    elif flag and i == Q - 1:
        print("YES", end="")
    elif flag == False and i == Q - 1:
        print("NO", end="")
    else:
        print("NO")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值