1040. 有⼏个PAT
字符串APPAPT中包含了两个单词“PAT”,其中第⼀个PAT是第2位§,第4位(A),第6位(T); 第⼆个PAT是第3位§,第4位(A),第6位(T)。 现给定字符串,问⼀共可以形成多少个PAT?
输⼊格式:
输⼊只有⼀⾏,包含⼀个字符串,⻓度不超过105,只包含P、A、T三种字⺟。
输出格式:
在⼀⾏中输出给定字符串中包含多少个PAT。由于结果可能⽐较⼤,只输出对 1000000007取余数的结果。
输⼊样例:
APPAPT
输出样例:
2
分析:
构成多少个PAT,遍历字符串的每一个A,求出这个A前面有多少个P和后面有多少个T,P和T的乘积就是这个A的结果,再将所有的A的结果相加。
先遍历一遍字符串,求出字符串*有多少个T,然后从前往后遍历字符串,没遇到一个P,P的个数++,遇到一个T,T的个数–,当遇到A时,求乘积。
T的个数–,是因为:当遇到T时,还没遇见A,此时T在A前面,是PTA,而不是PAT。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;cin>>s;
int len=s.size();
int countt=0,countp=0,result=0;
for(int i=0;i<len;i++){
if(s[i]=='T')
countt++;
}
for(int i=0;i<len;i++){
if(s[i]=='P') countp++;
if(s[i]=='T') countt--;
if(s[i]=='A') result=(result+(countp*countt)%1000000007)%1000000007;
}
cout<<result;
return 0;
}