题目
题目的意思就是输入一串字符串,输出这一串字符串中有几个PAT子串
思路
我们只需要判断字符A前面有几个P,后面有几个T,用PT的结果就是当前这个A可以构成的PAT子串,因为字符串中可以有多个A,所以需要把结果加起来。可以先遍历数组有几个T,遍历A的时候前面有一个T我们就将存储T出现次数的变量-1就是A后面有几个T。
取余的时候一定要将PT的结果取余一次然后再对相加的结果取余一次,不然可能会数据溢出。
代码
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int main()
{
string s;
int t=0,z=0,p=0;
getline(cin,s);
for(int i=0;i<s.size();i++)//T出现的次数
{
if(s[i]=='T')
t++;
}
for(int i=0;i<s.size();i++)
{
if(s[i]=='P')//A前面有几个P
p++;
if(s[i]=='T')//A后面有个T
t--;
if(s[i]=='A')
z=(z+(p*t)%mod)%mod;
}
cout<<z;
return 0;
}