題目來源ios
字符串 APPAPT
中包含了兩個單詞 PAT
,其中第一個 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二個 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。spa
現給定字符串,問一共能夠造成多少個 PAT
?code
輸入只有一行,包含一個字符串,長度不超過1,只包含 P
、A
、T
三種字母。blog
在一行中輸出給定字符串中包含多少個 PAT
。因爲結果可能比較大,只輸出對 1000000007 取餘數的結果。ci
APPAPT
2
對於一個肯定位置的A來講,造成PAT的個數,就至關於 A左邊P的個數 與 A右邊T的個數 的成績字符串
全部先遍歷一次字符串,統計T的總個數。get
第二次遍歷字符串,遇到P,則countP++;遇到A,則countP * countT;遇到T則countT--string
爲何要countT--?it
遇到一個T,則說明這個T就位於後面的A的左邊,不能與後面的A構成PATio
注意,獲得的結果還要對1000000007取摸
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <vector> 5 #include <map> 6 #include <set> 7 #include <string> 8 #include <cctype> 9 #include <unordered_map> 10 using namespace std; 11 12 13 int main() 14 { 15 string s; 16 int countT = 0; 17 int countP = 0; 18 int result = 0; 19 int mod = 1000000007; 20 cin >> s; 21 int len = s.size(); 22 23 for (int i = 0; i < len; ++i) 24 { 25 if (s[i] == 'T') 26 { 27 countT++; 28 } 29 } 30 31 for (int i = 0; i < len; ++i) 32 { 33 if (s[i] == 'P') 34 { 35 countP++; 36 } 37 else if (s[i] == 'T') 38 { 39 countT--; 40 } 41 else if (s[i] == 'A') 42 { 43 result = (result + (countT * countP)) % mod; 44 } 45 } 46 cout << result; 47 return 0; 48 }