PAT乙级 1040有几个PAT python

第一遍即兴做题的代码

s = input()
Aindex = s.index('A')
sdeal = [i for i in s]  # 当成列表处理
countP = 0;
countT = 0
sum = 0
flag1 = 1  # 为1说明还有A,用来找PAT
while flag1 == 1:
    # 初始化
    # print(sdeal,Aindex)
    countP = 0;
    countT = 0
    for i in range(0, Aindex):
        if sdeal[i] == 'P':
            countP += 1
    for i in range(Aindex + 1, len(sdeal)):
        if sdeal[i] == 'T':
            countT += 1
    sum += countP * countT
    try:
        del sdeal[Aindex]  # 删除用过的A
        Aindex = sdeal.index('A')
    except:
        flag1 = 0
print(sum % 1000000007)

提交后优化的代码

s = input()
sdeal = [i for i in s]  # 当成列表处理
Aindex = []
for i in range(len(sdeal)):
    if sdeal[i] == 'A':
        Aindex.append(i)
sum=0
for index in Aindex:
    countP = countT = 0
    for i in range(0, index):
        if sdeal[i]=='P':
            countP+=1
    for i in range(index+1,len(sdeal)):
        if sdeal[i] == 'T':
            countT +=1
    sum +=countP*countT
print(sum % 1000000007)

在这里插入图片描述
别人的不超时代码(真*直接遍历就行,别想复杂)

#关键:按序遍历,不重复使用
s = input()
count_P = count_PA = count_PAT = 0
for i in s:
    if i == 'P':
        count_P += 1
    elif i == 'A' :
        count_PA += count_P
    elif i == 'T':
        count_PAT += count_PA
print(count_PAT % 1000000007)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值