解题思路:
总共只有三个字母,np记录目前为止P的数量,tmp记录目前为止所有PA的数量,每次遇到T在答案里加上tmp即可。
代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const long long MOD = 1000000007;
int main()
{
string s;
while(cin >> s)
{
long long np = 0;
long long ans = 0, tmp = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == 'P')
np++;
if(np > 0 && s[i] == 'A') //遇到一个A,更新tmp的值,即前面所有的P都可与之组合
tmp = (tmp + np) % MOD;
if(s[i] == 'T')//遇到T,把前面所有的PA组合加入答案
ans = (ans + tmp) % MOD;
}
printf("%lld\n", ans);
}
return 0;
}