问题描述
在庆祝祖国母亲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”的数量。
示例1
输入:CCHNCHN
输出:7
示例2
输入:CCHNCHNCHNCHN
输出:30
问题分析
本题需要注意的是,这里的子串的定义与我们之前遇到的子串的定义有所区别。这里的子串,之间可以空几个字符,如“ABC”的子串“AC”。
解题思路:找到H判断H前边有几个C,找到N判断前边有几个CHN,最终CHN的总个数就是子串个数。
C语言程序
#include<stdio.h>
int main()
{
//注意这里子串的定义和我们经常使用的子串的定义不同
//不知道要输入的字符的个数,因此只能根据最大值进行定义
char str[8000];
scanf("%s",str);
//注意:如果循环中使用str数组名,则无法进行str++操作,因此需要定义一个指针
char* p = str;
//找到H判断H前边有几个C,找到N判断前边有几个CHN,最终CHN的总个数就是子串个数
long long c=0,ch=0,chn=0;
while(*p)
{
if(*p == 'C')
{
c++;
}
else if(*p == 'H')
{
ch += c;
}
else if(*p == 'N')
{
chn += ch;
}
p++;
}
printf("%lld",chn);
return 0;
}