有几个PAT
题目描述
字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二个 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式
输入只有一行,包含一个字符串,长度不超过$10^5$,只包含 P
、A
、T
三种字母。
输出格式
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例
1 | APPAPT |
输出样例
1 | 2 |
问题解决
解题思想
此题可按从前往后遍历或者从后往前遍历分下面两种解法:
方法一:从前往后遍历(代码1)
从前往后遍历整个字符串,遇到字符P
就统计其个数,遇到字符A
就统计其之前所有的P
的个数,遇到字符T
就统计其之前所有的PA
的个数,每次循环统计后判断总PAT
的数量是否超过1000000007个,若超过则取对1000000007的余数,这样就不必将coun定义为long long型。
方法二:从后往前遍历(代码2)
从后往遍历整个字符串,遇到字符T
就统计其个数,遇到字符A
就统计其之后所有的T
的个数,遇到字符P
就统计其之后所有的AT
的个数。可见此法与方法一思想是一样的。
代码示例(C/C++)
代码1
1 | //代码1,从前往后遍历 |
代码2
1 | //代码2,从后往前遍历 |
题目来源:PAT乙级1040
作者:CHEN, Yue
单位:浙江大学