思想:刚开始想的以T为计算标志,即出现T时开始计算前边pat的个数,但是没有办法确定a是否在p后边,就换成A为计算标志,pat的个数是A前面和后面p和t的个数乘积;
找到第一个A后边T的个数,再每次遇到T就t–,否则后边三个测试点超时。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
long long l=0,p=0,a=0,t=0;
char temp;
int sign=0;
for(int i=0;i<(int)s.length();i++){
if(s[i]=='A'&&p!=0){
if(sign!=0)
l+=p*t;
if(sign==0){
for(int j=i+1;j<(int)s.length();j++)
if(s[j]=='T')
t++;
l+=p*t;
sign=1;
}
}
if(s[i]=='P')
p++;
if(s[i]=='T'&&t!=0)
t--;
}
l%=1000000007;
cout<<l;
return 0;
}