思路:
对于每一个确定位置的A来说,它形成的PAT的个数等于它左边P的个数乘以T的个数,因此对字符串中每个A,计算他左边P的个数乘右边T的个数,然后把所有A的乘积相加;可以利用int型数组记录P的个数和T的个数
C代码:
#include<stdio.h>
#include<string.h>
char str[100010];
int leftnump[100010]={0};
int main(){
gets(str);
int len=strlen(str);
for(int i=0;i<len;i++){
// printf("%c",str[i]);
if(i>0){
leftnump[i]=leftnump[i-1];
}
if(str[i]=='P'){
leftnump[i]++;
//printf("%d",leftnump[i]);
}
}
// for(int i=0;i<len;i++){
printf("%d",leftnump[i]);
// }
//
int ans=0,rightnumt=0;
for(int i=len-1;i>=0;i--){
// printf("%d",leftnump[i]);
if(str[i]=='T'){
rightnumt++;
}
else if(str[i]=='A'){
ans=(ans+leftnump[i]*rightnumt)%1000000007;
}
}
printf("%d\n",ans);
}