PAT (Basic Level) Practice 1040 有几个PAT

                                          1040 有几个PAT

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT

输入格式:

输入只有一行,包含一个字符串,长度不超过10​5​​,只包含 PAT 三种字母。

输出格式:

在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT

输出样例:

2

实现代码:

#include<cstdio>
#include<cstring>
const int MAXN =100010;
const int MOD=1000000007;
char str[MAXN];
int leftNumP[MAXN]={0};//每一位左边的P的个数
int main()
{
	gets(str);
	int len=strlen(str);
	for(int i=0;i<len;i++)
	{
		if(i>0){  //统计每一位左侧P的个数
			leftNumP[i]=leftNumP[i-1];
		}
		if(str[i]=='P'){
			leftNumP[i]++;
		}
	}
	int ans=0,rightNumT=0;
	for(int i=len-1;i>=0;i--)
	{
		if(str[i]=='T'){//统计T的个数
			rightNumT++;
		}else if(str[i]=='A'){
			ans=(ans+leftNumP[i]*rightNumT)%MOD;
		}
	}
	printf("%d\n",ans);
	return 0;
}

 

结果如下:

PAT (Basic Level) Practice 1040 有几个PAT