x=input()
sum=0
sumT=0
for i in x:
if i=="T":
sumT+=1
d={"P":0,"T":0}
for i in range(len(x)):
if x[i]=="P":
d["P"]+=1
elif x[i]=="T":
d["T"]+=1
else:
sum+=d["P"]*(sumT-d["T"])
sum=sum%1000000007
print(sum)
思路:
1.对于每一个'A'
,它由组成的"PAT"
的个数等于其左侧的'P'
的个数乘以其右侧的'T'
的个数。
2.先全部遍历一次求出所有的T
3.然后在遍历一次求出A左边的所有P,右边的T=所有的T-已经遍历到的T
有没有更快的方法呢?
aa=input()
P=A=T=0
for a in aa:
if a=='P':
P+=1
elif a=='A':
A+=P #遍历到一次A,就倍增一下数量
elif a=='T':
T+=A #再次倍增
print(T%1000000007)
这样就可以通过一次遍历,得到最终结果
扫描二维码关注公众号,回复:
2965192 查看本文章