0
点赞
收藏
分享

微信扫一扫

1040 有几个PAT(JAVA)


字符串 ​​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();
}
}

举报

相关推荐

0 条评论