• 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);
    	}
    }
    

    提交结果

    在这里插入图片描述

  • 相关阅读:
    loj1201(最大独立集)
    hdu4185+poj3020(最大匹配+最小边覆盖)
    【Leetcode】3Sum Closest
    【Leetcode】3Sum
    【Leetcode】Two Sum
    【Leetcode】Longest Consecutive Sequence
    【Leetcode】Median of Two Sorted Arrays
    【Leetcode】Search in Rotated Sorted Array II
    【Leetcode】Search in Rotated Sorted Array
    【Leetcode】Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/wowpH/p/11687414.html
Copyright © 2020-2023  润新知