问题 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;
}
posted @   美羊羊给沸羊羊搬砖  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示