问题 O: 零基础学C/C++160——字符串

这道题数据量很大,字符串长度很长,需要做特殊优化。
注意点:因字符数组可能过大,很显然将不能用循环一步一步检查下去,并且运用strlen函数更有可能时间超限。
因此我们应该改变思路,并不能使用搜索。
本题可利用桶的思想,将每个字符在数组A,B中出现的次数记录下来
,并且若A数组中存在所有字母,那么就无需检查B数组中的字符
点击查看代码
/*本题可利用桶的思想,将每个字符在数组A,B中出现的次数记录下来
,并且若A数组中存在所有字母,那么就无需检查B数组中的字符*/
#include<stdio.h>
#include<string.h>
char e[1000100];
int main(void)
{
int i;
int r;
while (scanf("%s", e) != EOF)
{/*由题意得出应该是一个大字符串被#分来,故我们输入一个字符串*/
i = 0;
int c[30] = { 0 };//两个桶
int d[30] = { 0 };
while (e[i] != '#')//对A中字符进行计数
{
c[e[i] - 97]++;
i++;
}
i++;//进入到字符串B
while (e[i] != '#')//B中字符进行计数
{
d[e[i] - 97]++;
i++;
}
for (i = 0; i < 25; i++)
{
if (c[i] == 0 && d[i] > 0)//A中有该字符而B中没有
{
printf("No\n");
break;
}
}
if (i == 25)
{
printf("Yes\n");
}
}
return 0;
}

浙公网安备 33010602011771号