题目描述
字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。 现给定字符串,问一共可以形成多少个PAT?
输入描述:
输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。
输出描述:
在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对1000000007取余数的结果。
输入例子:
APPAPT
输出例子:
2
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int mod = 1e9+7;
const int maxn = 1e5+100;
char s[maxn];
int p[maxn],t[maxn];
int main(void)
{
cin>>s;
memset(p,0,sizeof p);
memset(t,0,sizeof t);
int len=strlen(s);
for(int i=0;i<len;i++)
{
if(i>0)
p[i]=p[i-1];
if(s[i]=='P')
p[i]++;
}
int ans=0;
for(int i=len-1;i>=0;i--)
{
t[i]=t[i+1];
if(s[i]=='T')
t[i]++;
if(s[i]=='A')
ans=(ans+p[i-1]*t[i+1]%mod)%mod;
}
printf("%d\n",ans%mod);
return 0;
}