nowcoder---统计子串个数(C语言)

问题描述

在庆祝祖国母亲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;
}

 

猜你喜欢

转载自blog.csdn.net/qq_47406941/article/details/109787713