1040. 有⼏个PAT

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;
}
上一篇:伪类实现书签样式


下一篇:zplane TONIC for mac(智能键和音阶查找器插件)