PAT1040----关于数学题目的解法新思路值得借鉴,字符的配对

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

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

输入格式:

输入只有一行,包含一个字符串,长度不超过1,只包含 PAT 三种字母。

输出格式:

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

输入样例:

APPAPT

输出样例:

2

/*
* (与PAT字符有关的题目,可回顾一下 1003. 我要通过)
* 1. 重点分析字母A :
* 1.1 A前有P,后有T才能形成PAT;
* 1.2 A能构成的PAT数量 = 之前P的数量 * 之后T的数量
* 2. 突破口:先遍历一遍,获取T的数量
*/

 
#include <stdio.h>
#include<string.h>
#include<iostream>
#include <math.h>
#include <malloc.h>
#include <iomanip>
#include <stdlib.h>
using namespace std;

int main() {
    char str[100001];
    cin>>str;
    long cp=0,ca=0,ct=0;
    for(int i=0;i<strlen(str);i++)
    {
        if(str[i]=='T')
        {
            ct++;
        }
    }
    
    for(int i=0;i<strlen(str);i++)
    {
        if(str[i]=='P')
        {
            cp++;
        }else if(str[i]=='A')
        {
            ca=(ca+cp*ct)%1000000007;
        }else{
            ct--;
        } 
        if(ct==0)
        {
            break;
        }
    }
    cout<<ca;
    return 0;
}
原文地址:https://www.cnblogs.com/BananaMan/p/11244928.html