zoukankan      html  css  js  c++  java
  • PAT——有几个PAT

    思路来源:https://www.cnblogs.com/asinlzm/p/4440603.html

    字符串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


    核心思路如果有一个P出现,则只要知道后面有多少种AT可选,则这个P可以对应的PAT选择方法就有多少种;AT类似。


    啰嗦思路:组成PAT的条件有P在A前出现,A在T前出现 。
    求PAT选择的方法有多少种,则只要知道每个P对应的PAT选择方法有多少种,求和即可;
    每个P对应PAT种类取决于这个P的后面,有多少种AT可选(如果有一个P出现,则只要知道后面有多少种AT可选,则这个P可以对应的PAT选择方法就有多少种)。

    一个P后面有多少种AT可选,其实和这个字符串中多少种PAT可选是一个问题,即所有的A对应的AT选法的和;
    一个A对应的AT种类取决于这个A后面有多少种T可选(如果有一个A出现,则只要知道后面有多少种T出现,则这个A对应的AT选择方法就有多少种)。

    eg:PPPAATTT
    字符: P P P A A T T T
    位置: 7 6 5 4 3 2 1 0

    下标为7的P对应的PAT选法取决于后面字符串(PPAATTT)中AT的选法,其他P相应对应自己后面的字符串的AT选法;
    下标为4的A对应的AT选法取决于后面字符串(ATTT)中的T的选法,另一个A相应处理;
    下标为2/1/0的T进行不需要选择了,因为一个T对应的T的选法就是自身;
    代码变量说明:
    numAT表示当前已处理的字符串字串中T的选法,也就表明,如果处理一个字符是A,则这个字符A对应的AT的选法,就是numAT;
    numPAT的理解相对应。
    手工流程演示:位于下标5的P对应的PAT的选法有6种,来源于P后面的两个A,下标4的A对应的AT有3种选法,下标3的A也是。

     1 package com.hone.basical;
     2 
     3 import java.util.Scanner;
     4 
     5 /**
     6  * 原题目:https://www.patest.cn/contests/pat-b-practise/1039
     7  * @author Xia
     8  * 利用递归来处理!!!!
     9  */
    10 
    11 public class basicalLevel1040howManyPat {
    12     public static void main(String[] args) {
    13         Scanner in = new Scanner(System.in);
    14         char[] pat = in.nextLine().toCharArray();
    15         int len = pat.length;
    16         in.close();
    17         int numPat = 0,numAt = 0, num = 0 ;
    18         //从后面往前面遍历
    19         while((len--)>0){
    20             if (pat[len] == 'T') {
    21                 numAt++;
    22             }else if (pat[len] == 'A') {
    23                 numPat+=numAt;
    24             }else {
    25                 num+=numPat;
    26                 //因为输出的结果具有周期性,所以可以提前处理,当参数大于指定的次数的时候
    27                 //可以先取余数
    28                 if (num > 1000000007) {
    29                     num = num%1000000007;
    30                 }
    31             }
    32         }
    33         System.out.println(num);
    34     }
    35 }

  • 相关阅读:
    算法系列(三)
    .net页面生命周期
    初级程序员的学习方法见解
    .net面向对象学习笔记(二)
    算法系列(二)
    “automation服务器不能创建对象”的问题的解决方案大全
    UNKNOWN.RPT 无法将请求提交后台处理
    水晶报表ActiveX控件打印
    .net中调用js乱码解决办法
    GridView自动序号
  • 原文地址:https://www.cnblogs.com/xiaxj/p/7860180.html
Copyright © 2011-2022 走看看