描述
字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位§,第4位(A),第6位(T);第二个PAT是第3位§,第4位(A),第6位(T)。
现给定字符串,问一共可以形成多少个PAT?
输入
输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。
输出
在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对1000000007取余数的结果。
样例输入
APPAPT
样例输出
2
题目来源
PAT 乙级
分析:
一道简单的DP题,先统计T的个数,在从前往后找P的,中间遇到A后就累加。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int l=s.length();
long long numT=0,numP=0,sum=0;
for (int i=0;i<l;i++)
{
if (s[i]‘T’) numT++;
}
for (int i=0;i<l;i++)
{
if (s[i]‘P’) numP++;
else
if (s[i]‘T’) numT–;
else
if (s[i]‘A’) sum=(sum+numP*numT)%1000000007;
}
printf("%d",sum%1000000007);
return 0;
}