1040 有几个PAT (25分)
字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二个 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式:
输入只有一行,包含一个字符串,长度不超过105,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
APPAPT
输出样例:
2
一开始自己写了一个巨麻烦的程序,还超时,看了dalao的思路,瞬间就跪了,直呼不可战胜。
dalao传送门:https://blog.csdn.net/ice_camel/article/details/44263451
dalao的思路是:将输入的字符串转换为列表,并逆置。 从后往前扫描,先统计T的数量,如果遇到一个A,此时T的数量就是AT的数量了。同理,如果遇到一个P,此时,AT的数量就是PAT的数量。从尾扫描至头,即可得到所有PAT的数量。
python代码:
#将输入的字符串转换为列表并逆置
#Convert the input string to a list and reverse it
a=list(input())
a.reverse()
#分别记录T、AT、PAT的数量
#Record the number of T,AT,PAT
count_T=0
count_AT=0
count_PAT=0
#扫描并统计列表a
#Scan and count the list a
for i in a:
if 'T'==i:
count_T=count_T+1
elif 'A'==i:
count_AT=(count_AT+count_T)%1000000007
else:
count_PAT=(count_PAT+count_AT)%1000000007
#输出
#Output
print(count_PAT)