IDEA:
1.需要从后往前遍历字符串,统计T的个数,AT的个数,PAT的个数,排列组合问题
2.碰到T,记录该T后面T的总个数(包括这个T);
碰到A,记录该A后面AT组合的总个数;其中包括之前统计的A后面AT的总个数加上这个A与后面全部T组合的个数(即之前统计的T的总个数);
碰到P,记录该P后面PAT组合的总个数。
CODE
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif
string str;
cin>>str;
int numT=0,numAT=0,numPAT=0;
for(int i=str.size()-1;i>=0;i--){
if(str[i]=='T'){
numT++;
}else if(str[i]=='A'){//AT
numAT=(numAT+numT)%1000000007;
}else{
numPAT=(numPAT+numAT)%1000000007;
}
}
cout<<numPAT<<endl;
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}