题目链接
遍历字符串,PAT的个数等于每一个A的左边P的个数乘以右边T的个数的累加和。可以用一个整形数组记录每一位左边的P的个数。
#include<cstdio>
#include<cstring>
char str[100001];
int p_num[100001];//p_num[i]表示当前位左边p的个数
int main(){
scanf("%s",str);
int count=0,t_count=0,len=strlen(str);
for(int i=0;i<len;i++){//从左到右遍历字符串
if(i>0){//当前为不是0
p_num[i]=p_num[i-1];//继承上一位的结果
}
if(str[i]=='P'){//如果当前位是p
p_num[i]++;//令p_num[i]自增1
}
}
for(int i=len-1;i>=0;i--){//从右到左遍历字符串
if(str[i]=='T'){//如果当前位是T
t_count++;//右边t的个数增1
}
else if(str[i]=='A'){//如果当前为是A
count=(count+p_num[i]*t_count)%1000000007;
//累计乘积
}
}
printf("%d",count);
return 0;
}