这里数组较大,尽量减少遍历次数。
本题以A为核心,对“A前所有的P”和“A后所有的T”进行统计然后相乘,得到此A所能构成的PAT数,最后对所有A能构成的PAT数相加得到答案。
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
int nump[100000]={0},numt[100000]={0},numP=0,numT=0;
long int sum=0;
cin>>str;
for(int i=0;i<str.length();i++){
if(str[i]=='P') numP++;
if(str[i]=='A'){
nump[i]=numP;
}
}
for(int i=str.length()-1;i>=0;i--){
if(str[i]=='T') numT++;
if(str[i]=='A'){
numt[i]=numT;
sum+=nump[i]*numt[i];
}
}
cout<<sum%1000000007;
return 0;
}