AcWing 1583:PAT 计数 ← 中国电子学会青少年软件编程等级考试(2024年C++四级)
【题目来源】
https://www.acwing.com/problem/content/1585/
【题目描述】
字符串 APPAPT 中共包含两个 PAT 作为子串。
第一个子串由第二,第四和第六个字符组成,第二个子串由第三,第四和第六个字符组成。
现在给定一个字符串,请你求出字符串中包含的 PAT 的数量。
【输入格式】
共一行,包含一个由大写字母 P,A,T 构成的字符串。
【输出格式】
输出字符串中包含的 PAT 的数量。
由于结果可能很大,请你输出对 1000000007 取模后的结果。
【数据范围】
给定字符串的长度不超过 10^5。
【输入样例】
APPAPT
【输出样例】
2
【算法分析】
对于字符串中的每一个 A,它能够构成字串 PA 的数量是它之前的所有 P 的数量。
对于字符串中的每一个 T,它能够构成字串 PAT 的数量是它之前所有字串 PA 的数量。
【算法代码】
#include <bits/stdc++.h>
using namespace std;const int MOD=1e9+7;
long long p,a,t;int main() {string s;cin>>s;for(int i=0; i<s.size(); i++) {if(s[i]=='P') p++;else if(s[i]=='A') a+=p;else t=(t+a)%MOD;}cout<<t<<endl;return 0;
}/*
in:
APPAPTout:
2
*/
【参考文献】
https://www.acwing.com/solution/content/11089/
https://www.acwing.com/solution/content/46459/
https://www.acwing.com/solution/content/124384/