题目来源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 }