1. 程式人生 > >PAT乙級—1040. 有幾個PAT(25)-native

PAT乙級—1040. 有幾個PAT(25)-native

字串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所對應所有的PAT再往下迴圈,這樣就造成了臃腫以及很多不必要的遍歷,而此種方案,對每一個字元的遍歷都用到了,馬上投入計算,效率則高。

#include<iostream>  
#include<string>  
using namespace std;  
int main(){  
    string str;  
    int num_t=0,num_at,num_pat=0;  
    cin>>str;  
    for(int i=str.size()-1;i>=0;--i){  
        if(str[i]=='T')  //如果是T,則記錄T的個數
            _t++num;  
        if(str[i]=='A')  //如果是A,計算出A與T組成AT的個數:即當前的這個A加上這個A之後的T。如果還是A,則就是AT的的數量加上T的數量,如果又是T,則T的個數加1,再計算的時候則再加上
num_at=(num_at+num_t)%1000000007; if(str[i]=='P') //如果是P,則計算P與AT組成的個數 num_pat=(num_at+num_pat)%1000000007; } cout<<num_pat; return 0; }

題目連結: