字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二个 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式:
输入只有一行,包含一个字符串,长度不超过1,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
APPAPT
输出样例:
2
分析:
对于一个确定位置的A来说,形成PAT的个数,就相当于 A左边P的个数 与 A右边T的个数 的成绩
所有先遍历一次字符串,统计T的总个数。
第二次遍历字符串,遇到P,则countP++;遇到A,则countP * countT;遇到T则countT--
为什么要countT--?
遇到一个T,则说明这个T就位于后面的A的左边,不能与后面的A构成PAT
注意,得到的结果还要对1000000007取摸
C++实现
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 }
原文地址:https://www.cnblogs.com/47Pineapple/p/11629862.html
时间: 2024-10-10 11:13:46