首页 > 试题广场 >

小乐乐与字符串

[编程题]小乐乐与字符串
  • 热度指数:12462 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在庆祝祖国母亲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
#include <stdio.h>
#include<string.h>
int main() {
    char a[8000];
    int i, j, n, k, count = 0;
    n = strlen(a);
    scanf("%s", a);
    for (i = 0; i < n; i++)
    {
        if (a[i] == 'C')
            for (j = i; j < n; j++)
            {
                if (a[j] == 'H')
                {
                    for (k = j; k < n; k++)
                    {
                        if (a[k] == 'N')
                            count++;
                    }
                }
            }
    }
这个有什么问题,在别的地方就可以啊
    printf("%d", count);
    return 0;
}
编辑于 2023-12-12 15:56:40 回复(0)
这样算超时,有没有好一点的算法
#include<stdio.h>
#include<string.h>
int main(){
    char str[8000];
    scanf("%s",&str);
    long int i,j,k;
    long long int num=0;
    long long int size=strlen(str);
    for(i=0;i<size;i++){
        if(str[i]=='C'){
            for(j=i;j<size;j++){
                if(str[j]=='H'){
                    for(k=j;k<size;k++){
                        if(str[k]=='N'){
                            num++;
                        }
                    }
                }
            }
        }
    }
    printf("%lld",num);
}
发表于 2022-01-05 20:26:17 回复(1)
#include<stdio.h>
int main()
{
    long long c=0,ch=0,chn=0;
    char s[8000]={0};
    scanf("%s",s);
    char*p=s;
    while(*p)
    {
        if(*p=='C')
        {
            c++;
        }
        else if(*p=='H')
        {
            ch+=c;
        }
        else if(*p=='N')
        {
            chn+=ch;
        }
        p++;
    }
    printf("%lld",chn);
    return 0;
}

发表于 2022-01-03 17:51:57 回复(0)