每日一题(一):识别字符串中的字符是否唯一

embedded/2025/1/12 11:14:41/

目录

一、前言

二、题目

三、题目分析

(一)明确需求

(二)分析思路

四、将思路转变为一个程序

C++代码

 C代码

 注释:

五、总结 


一、前言

作为博主在本系列文章中的第一篇文章,博主先对本系列做一个简单的介绍。

本系列致力于以每日一题这种循序渐进的方法来教大家如何进行题目理解,学习解题思路,扩展解题思维。博主保证博客讲解清晰、思路明确,也希望可以给大家带来满意的收获。

现在CSDN网站上写每日一题类型的博主有不少,但是能够对题做到详细清晰讲解的博主却是很少的,甚至很多文章只是写了一个题目和一个答案就结束了。博主个人认为原因有以下几种:

1、本身并非以讲题解题为目的来写博客,而是单纯以总结自己学到了什么,做了什么为目的。这种纯个人总结性文章,对通过看博客来学习的同学而言用处是及其有限的。

2、部分博主写的博客的受众下线是非常高的,也就是说想要看懂这些文章本身就需要有非常深厚的思维能力和经验水准了,而这又对大部分需要通过看博客来提升自己的同学而言是极不友好的。

博主写这一个系列目的:

1、对个人刷题进行复盘,并督促自己的学习进程。

2、明确解题思路,刨析题目核心,借此培养解题思维。

这对博主自己而言可以对所写的题目进行复习,对解题思路进行回顾,所以必然是讲解越清楚越好;对大家而言便能深入理解到该题的核心及其思考过程,从而学到解题思维,扩展解题思路。

二、题目


实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。若唯一,则输出YES,否则输出NO。

输入描述:

输入一行字符串,长度不超过 100。

输出描述:

输出一行,若字符串的字符是唯一的,则输出YES,否则输出NO。
 

三、题目分析

(一)明确需求

根据题目描述,我们是要实现一个判断字符串中的字符是否只出现了一次的算法,并且明确表述了忽略大小写,消除了我们对特殊情况如‘A'与'a'是否算相同的顾虑。题目中明确提到了输入描述,所以我们在程序设计时,必须设置一个变量来接收从输入流输入的数据。

输入流和输出流是计算机编程中用于处理数据的核心概念,主要用于读取和写入数据。‌‌

定义和用途
‌输入流(InputStream)‌:用于从数据源读取数据,如文件、网络连接等。输入流只能读取数据,不能写入数据。
‌输出流(OutputStream)‌:用于将数据写入目标,如文件、网络连接等。输出流只能写入数据,不能读取数据。

说白了便是:输入流用于接收从键盘(输入设备)输入的数据,输出流便是将你要输出的信息输出到显示器(输出设备) 上。

前面说了我们要设置一个变量来接收数据,那么这个变量要多大呢?最大100个字符,所以我们使用一个大小为100的字符数组便可以了。(在C语言中没有字符串类型,所以我们会使用字符数组来表示字符串)另外还有一个十分容易出错的地方便是输出,如输出描述中说的,我们要根据判断输出"YES"或"NO",但是同样的情况若我们输出的是“yes”或“no”算对还是算错?根据人为判断,我们说“YES”还是“yes”都是表示对的,但是由于计算机中大小写字母的编码不同,"yes" != "YES"

(二)分析思路

要解决这一个问题很简单,和我们肉眼分辨一样,我们只需要先记住一个字符,在从除这个字符之外的字符中找,判断是否有和它一样的字符,所以我们可以采用双层循环加判断的方法进行解答。

注意我标粗的部分,这就是我们要设计的算法中的主要内容。

四、将思路转变为一个程序

博主写了C++版本与C版本的代码,对于使用如JAVA或Python语言的同学,根据格式替换即可。 

C++代码

#include <iostream>
#include <string.h>
using namespace std;int func(char* aim, int len)
{int i = 0;int j = 0;//主要内容for (i = 0; i < len; i++)//记住一个字符{for (j = 0; j < len; j++){if (aim[i] == aim[j] && i != j)//从其它字符中判断是否有和它一样的字符{cout << "NO" << endl;return 1;}}}cout << "YES" << endl;return 0;
}int main()
{char aim[100];//设置一个大小为100的字符数组接收数据cin >> aim;int len = strlen(aim);//借助strlen函数确定字符串大小,以此确定边界func(aim, len);return 0;
}

 C代码

#include <stdio.h>
#include <string.h>int func(char* aim, int len)
{int i = 0;int j = 0;//主要内容for (i = 0; i < len; i++)//记住一个字符{for (j = 0; j < len; j++){if (aim[i] == aim[j] && i != j)//从其它字符中判断是否有和它一样的字符{printf("NO\n");return 1;}}}printf("YES\n");return 0;
}int main()
{char aim[100];//设置一个大小为100的字符数组接收数据scanf("%s", aim);int len = strlen(aim);//借助strlen函数确定字符串大小,以此确定边界func(aim, len);return 0;
}

 注释:

对于strlen函数的用法我在之前的博客中已经进行了详细的讲解,不太清楚的同学可以看一下我前几期的博客。

五、总结 

本期博客所选用的题目相对较于简单,但对于算法思维的培养却有不小的帮助。从思路到实现一一对应、有条不紊,“思路贯通而不滞” ,这便是算法思维。

如果喜欢本篇博客的同学可以点赞加收藏,如果期待后期博客的同学也可以给博主点一个关注。

如果文章出错可随时在评论区斧正,哪里有不清楚的地方也可以在评论区进行讨论,博主看到必答。


http://www.ppmy.cn/embedded/153267.html

相关文章

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…

Centos 下安装 GitLab16.2.1

参考 https://blog.csdn.net/weixin_46059351/article/details/140649426 https://blog.csdn.net/qq_46028493/article/details/144993598 Centos 安装 GitLab 修改 yum 的配置 首先查看目前配置的 yum&#xff1a; cat /etc/yum.repos.d/CentOS-Base.repo应该是这个样子…

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域&#xff1a;一组具有相同数据类型的值的集合。 笛卡尔积&#xff1a;所有域&#xff08;域可相同&#xff09;中所有取值的组合 例如&#xff1a;D1{1,2,3}&#xff0c;D2{A,b}&…

基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)

已完成功能&#xff1a; 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制&#xff0c;可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…

【华为OD-E卷 - 求字符串中所有整数的最小和 100分(python、java、c++、js、c)】

【华为OD-E卷 - 求字符串中所有整数的最小和 100分&#xff08;python、java、c、js、c&#xff09;】 题目 输入字符串s&#xff0c;输出s中包含所有整数的最小和。 说明&#xff1a; 字符串s&#xff0c;只包含 a-z A-Z 合法的整数包括 1&#xff09;正整数&#xff1a;一…

深入浅出Java Web开放平台:从API设计到安全保障的全方位探索

随着互联网的快速发展&#xff0c;越来越多的企业开始构建开放平台&#xff0c;特别是在Java Web开发中&#xff0c;如何实现高效的开放平台接口&#xff0c;保障系统的安全性&#xff0c;并且提升开发者的体验&#xff0c;已经成为了很多开发者关注的热点话题。本文将深入探讨…

macbook使用 pip 安装 pyicu 报错

1、问题分析 当使用ragflow等开源工具进行二次开发时&#xff0c;在安装基础项目依赖&#xff0c;需要使用到很多系统中的基础库&#xff0c;时常会报错&#xff0c;今天遇到的问题是 pyicu 包安装时报错。 基本问题分析&#xff0c;安装 pyicu 时&#xff0c;需要使用系统中…

centos 搭建nginx+配置域名+windows访问

准备工作&#xff1a;一个完整的centos环境&#xff0c;nginx安装包(可以从官网下载)nginx: download 一&#xff1a;centos可能有精简版&#xff0c;部分环境没有相关依赖包&#xff0c; 需要检查以下项&#xff1a; 1.gcc检查&#xff1a;gcc -v&#xff08;回车后应当有版…