题目描述
找出字符串中PAT出现的次数。
题目分析
我们从最后一个位置开始往前遍历,我们会先遇到T,就将numt+1。然后遇到A,就将numt+numat并mod10000000017。然后遇到P,就将numat+numpat并mod10000000017。为什么这样计算呢?因为T与A最少的一个一定是出现次数,遇到A则我们更新的就是at字符串的数目,遇到P则更新的是pat出现的事。
代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int mod = 1000000007;
int main()
{
string s;
cin >> s;
int numpat, numat, numt;
numpat = numat = numt = 0;
for (int i = s.length() - 1; i >= 0; i--)
{
if (s[i] == 'T')
{
numt++;
}
else if (s[i] == 'A')
{
numat = (numt + numat) % mod;
}
else
{
numpat = (numpat + numat) % mod;
}
}
cout<<numpat % mod<<endl;
//system("pause");
return 0;
}
答题用时19min
Q40——finish√