题目描述
链接
计算一个字符串中有多少PAT
分析
暴力要超时
要想知道构成多少个PAT,那么遍历字符串后对于每一A,它前面的P的个数和它后面的T的个数的乘积就是能构成的PAT的个数
需要先遍历字符串数一数有多少个T
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
const int maxn = 1e5+10;
char s[maxn];
int cnt = 0;
scanf("%s", s);
int len = strlen(s);
int p,a,t;
p = a = t = 0;
for(int i=0;i<len;i++){
if(s[i] == 'T') t++;
}
for(int i=0;i<len;i++){
if(s[i] == 'P') p++;
if(s[i] == 'T') t--; //在遇到A前遇到的t都不算
if(s[i] == 'A') cnt = (cnt + (p*t)%1000000007)%1000000007;
}
printf("%d
",cnt);
}