题目描述
在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。
子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。
输入描述:
输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)
输出描述:
输出一个整数,为字符串s中字串“CHN”的数量
解题思路
可以先找C的子序列,那么遇到H的话就组成CH此时有C个"CH”序列,同理,当你找到“N”的时候,就是“CH“还有"N组成的“CHN”,"CH“的个数就是“CHN”的个数,把个数做累加。
代码
#include<iostream> using namespace std; int main() { ios::sync_with_stdio(0);//而这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间 string s; cin >> s;//输入s long long ans = 0;//初始化为0 long long sum = 0;//初始化为0 int c=0, h=0;//初始化为0 int u; for (int i = 0; i < s.size(); i++)//s.size(),字符串s的长度 { if (s[i] == 'C')//如果第一个符合C { c++; } else if (s[i] == 'H')//遇到H的话就组成CH此时有C个"CH”序列 { h += c; } else if(s[i]=='N')//找到“N”的时候,就是“CH“还有"N组成的“CHN” { ans +=h;//个数做累加 } } cout << ans << endl;//输出结果 return 0; }