线性走一遍,如果遇到P则把当前位置之前P的个数加1,遇到A则更新当前位置之前 PA 的个数,遇到 T 则统计PAT的个数
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
string s;
cin >> s;
const int N = 1000000007;
long long sum = 0;
int p = 0, pa = 0;
for(auto& c : s){
if(c == 'P') p++;
else if( c == 'A') pa += p;
else if(c == 'T') sum += pa;
}
sum %= N;
cout << sum;
return 0;
}