PAT(B) 1040 有几个PAT(Java)

题目链接:1040 有几个PAT (25 point(s))

题目描述

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT?

输入格式

输入只有一行,包含一个字符串,长度不超过10​5​​,只包含 P、A、T 三种字母。

输出格式

在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例

APPAPT

输出样例

2

Java代码

/**********************************************************************************
Submit Time			Status		Score	Problem	Compiler		Run Time	User
8/24/2019, 20:37:57	Accepted	25		1040	Java (openjdk)	101 ms		wowpH
**********************************************************************************/
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		char[] arr = br.readLine().toCharArray();
		int[] number = new int[arr.length];
		for (int i = 0, num = 0; i < arr.length; ++i) {// 统计每个A前面的P的个数
			if ('P' == arr[i]) {
				++num;
			} else if ('A' == arr[i]) {
				number[i] = num;// 将当前A前面的P的个数保存
			}
		}
		long ans = 0;// PAT的个数
		for (int i = arr.length - 1, num = 0; i >= 0; --i) {// 统计每个A后面T的个数
			if ('T' == arr[i]) {
				++num;
			} else if ('A' == arr[i]) {
				ans += number[i] * num;// 当前A前面的P的个数×当前A后面的T的个数
			}
		}
		System.out.println(ans % 1000000007);
	}
}

提交结果

在这里插入图片描述

posted @ 2019-08-24 20:40  wowpH  阅读(255)  评论(0编辑  收藏  举报