字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二个 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式:
输入只有一行,包含一个字符串,长度不超过105,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
APPAPT
输出样例:
2
代码实现:
import java.io.*;
/**
* @author yx
* @date 2022-07-19 20:16
*/
public class Main {
// 要想知道构成多少个PAT,那么遍历字符串后对于每⼀A,它前⾯的P的个数和它后⾯的T的个数
// 的乘积就是能构成的PAT的个数。然后把对于每⼀个A的结果相加即可~~辣么就简单啦,只需要先遍
// 历字符串数⼀数有多少个T~~然后每遇到⼀个T呢~~countt–;每遇到⼀个P呢,countp++;然后⼀遇到
// 字⺟A呢就countt * countp~~把这个结果累加到result中~~最后输出结果就好啦~~对了别忘记要对
// 10000000007取余哦~~
static PrintWriter out=new PrintWriter(System.out);
static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in=new StreamTokenizer(ins);
public static void main(String[] args) throws IOException {
/*
转成字符数组的速率会提高一些
*/
char[] s=ins.readLine().toCharArray();
int countp=0;
int countt=0;
int ans=0;
for (int i = 0; i < s.length; i++) {
if(s[i]=='T')countt++;
}
for (int i = 0; i < s.length; i++) {
if(s[i]=='P')countp++;
if(s[i]=='T')countt--;
if(s[i]=='A')ans+=countp*countt;
if(ans>1000000007)ans=ans%1000000007;
}
out.print(ans);
out.flush();
}
}