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

目录

一、前言

二、题目

三、题目分析

(一)明确需求

(二)分析思路

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

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函数的用法我在之前的博客中已经进行了详细的讲解,不太清楚的同学可以看一下我前几期的博客。

五、总结 

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952498.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】数据预处理

为了能用深度学习来解决现实世界的问题&#xff0c;我们经常从预处理原始数据开始&#xff0c; 而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中&#xff0c;我们通常使用pandas软件包。 像庞大的Python生态系统中的许多其他扩展包一样&#xff0c;pan…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

城市生命线安全综合监管平台

【落地产品&#xff0c;有需要可留言联系&#xff0c;支持项目合作或源码合作】 一、建设背景 以关于城市安全的重要论述为建设纲要&#xff0c;聚焦城市安全重点领域&#xff0c;围绕燃气爆炸、城市内涝、地下管线交互风险、第三方施工破坏、供水爆管、桥梁坍塌、道路塌陷七…

请求方式(基于注解实现)

1.编写web.xml文件配置启动信息 <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app><display-name>Archetype Created Web Application</di…

WMS仓库管理系统,Vue前端开发,Java后端技术源码(源码学习)

一、项目背景和建设目标 随着企业业务的不断扩展&#xff0c;仓库管理成为影响生产效率、成本控制及客户满意度的重要环节。为了提升仓库作业的透明度、准确性和效率&#xff0c;本方案旨在构建一套全面、高效、易用的仓库管理系统&#xff08;WMS&#xff09;。该系统将涵盖库…

Pathview包:整合表达谱数据可视化KEGG通路

Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包&#xff0c;其会先下载KEGG官网上的通路图&#xff0c;然后整合输入数据对通路图进行再次渲染&#xff0c;从而对KEGG通路图进行一定程度上的个性化处理&#xff0c;并且丰富其信息展示。&#xff08;KEGG在线数…

数据结构:DisjointSet

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做&#xff0c;Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合&#xff0c;用来确定两个元素是否同属一个集合等&#xff0c;是效率最高的常见数据结构之一。 Wiki链接&#xff1a;https://en…

更好的世界:用定制托管对象上下文(NSManagedObjectContext)防止产生“空白”托管对象(下)

概述 用 SwiftUI CoreData 这对“双剑合璧”的强力开发组合&#xff0c;我们可以事倍功半、非常 easy 的开发出界面元素丰富且背后拥有持久数据库支持的 App。 不过&#xff0c;在某些情况下它们被误用或错用也可能带来一些“藏形匿影”的顽疾。 在本篇博文中&#xff0c;您…

个人在技术领导力方面的自我反思与提升

大家好&#xff01;我是 [数擎 AI]&#xff0c;一位热爱探索新技术的前端开发者&#xff0c;在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情&#xff0c;欢迎关注我的文章&#xff0c;我们一起成长、进步&#xff01; 开发领域&#xff1a;前端开发 | A…

Win10本地部署大语言模型ChatGLM2-6B

鸣谢《ChatGLM2-6B&#xff5c;开源本地化语言模型》作者PhiltreX 作者显卡为英伟达4060 安装程序 打开CMD命令行&#xff0c;在D盘新建目录openai.wiki if not exist D:\openai.wiki mkdir D:\openai.wiki 强制切换工作路径为D盘的openai.wiki文件夹。 cd /d D:\openai.wik…

排列高手

这篇主要是求再排位为 {1&#xff0c;3&#xff0c;4&#xff0c;....&#xff0c;n&#xff0c;2}的最优顺序下求mex。 但不知道为什么这样是最优 子数列的个数公式&#xff1a; 对于一个长度为N的数组&#xff0c; #include <bits/stdc.h> using namespace std; lon…

公众号如何通过openid获取unionid

通过接口 https://api.weixin.qq.com/cgi-bin/user/info?access_tokenxxxxxxx&langzh_CN 返回的数据如下&#xff1a; 前提是必须绑定 微信开放平台 token如何获取呢 代码如下&#xff1a; String tokenUrl "https://api.weixin.qq.com/cgi-bin/token"; …

软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享

在软件测试的实际环境搭建与管理过程中&#xff0c;了解和掌握NTFS权限管理、磁盘配额以及文件共享等知识至关重要。这些功能不仅影响系统的安全性和稳定性&#xff0c;还对测试数据的存储、访问以及多用户协作测试有着深远的影响。 一、NTFS权限管理 1.1 NTFS简介 NTFS&am…

类结构——构造方法

类结构——构造方法 构造方法的基本特性默认构造方法构造方法重载使用this关键字私有构造方法总结 构造方法&#xff08;Constructor&#xff09;是Java编程语言中的一个重要概念&#xff0c;用于初始化新创建的对象。在对象实例化时被调用&#xff0c;并负责设置对象的初始状态…

【linux系统之redis6】redis的安装与初始化

下载redis的linux对应的安装包&#xff0c;并上传到linux虚拟机里面 解压压缩包 tar -zxzf redis-6.2.6.tar.gz解压后&#xff0c;进入redis文件 cd redis-6.2.6执行编译 make && make install看到下图&#xff0c;就说明redis安装成功了 默认的安装路径&#xff0c…

STM32-笔记40-BKP(备份寄存器)

一、什么是BKP&#xff08;备份寄存器&#xff09;&#xff1f; 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电源被切断&#xff0c;他们仍然由VBAT维持供电。当系统在待机模式下被唤醒&#xff0c;或…

MobaXterm界面的简单介绍

界面全局 “命令行界面”&#xff08;Command Line Interface&#xff0c;简称CLI&#xff09;或“终端”&#xff08;Terminal&#xff09; 在这个界面中&#xff0c;用户可以输入命令来与操作系统进行交互,灰色光标是输入命令的位置 标签栏&#xff08;Tab Bar&#xff09; …

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…

Linux 下信号的保存和处理

信号的几个状态 信号抵达: 当接收到的信号被处理时, 此时就成为信号的抵达信号的未决: 从信号的产生到信号抵达这个时间段之间, 称为信号未决信号阻塞: 当进程设置了某个信号为阻塞后, 这个进程就不会在接收到这个信号信号忽略: 将信号设置为忽略后, 接收到这个信号, 对这个信…