在字符串中找某个子串数量,如果枚举一定超时,所以我们采用记录的方法,用一个值时刻记录c出现的次数,遇到h后,让该h和前面所有的a结合所以备选二元组加当前c出现的次数,每遇到一次就加一次,遇到n时就使答案加上当前的二元组个数即可所有数据均不用清空只需循环扫一遍o(n)即可解决问题
代码也很简单
#include <stdio.h>
int main()
{
char a[10000];
long long n=0,c=0,ch=0,i;
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='C')
c++;
else if(a[i]=='H')
ch=ch+c;
else if(a[i]=='N')
n=n+ch;
}
printf("%lld",n);
}