PAT有几个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的组成方式是叠加的,所以每遇到T的时候,pat都要增加一次,然而增加的次数却是pa的组成总次数。
然而每次遇到a。pa的组合总次数就要加一次。增加的次数为到当前位置P的总次数。很巧妙的动态规划。代码如下:(仅限牛客ac)

import java.util.Scanner;

public class pat30 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String str=sc.next();
		char c[]=str.toCharArray();
		long p=0,pa=0,pat=0;
		for(int i=0;i<c.length;i++)
		{
			 if(c[i]=='P') {
			        p++;
			    }else if(c[i]=='A') {
			        pa+=p;
			    }else {
			        pat+=pa%1000000007;
			    }
		}
		System.out.println(pat%1000000007);
}
}

你可能感兴趣的:(#,dp,pat,dp)