• C/C++语言100题练习计划 99——找第一个只出现一次的字符


    名人说:博学之,审问之,慎思之,明辨之,笃行之。——《中庸》
    进度:C/C++语言100题练习计划专栏,目前99/100

    一、问题呈现

    1.问题描述

    Problem Description

    给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出 no

    2.输入输出

    Input

    一个字符串,长度小于 1100 1100 1100

    Output

    输出第一个仅出现一次的字符,若没有则输出 no

    3.测试样例

    样例1️⃣
    Sample Input

    abcabd
    

    Sample Output

    c
    

    样例2️⃣
    Sample Input

    aabbcc
    

    Sample Output

    no
    

    二、源码实现

    #include
    #include
    using namespace std;
    bool check[50],flag[50];
    
    int main()
    {
    	string s;
    	//输入字符串
    	cin >> s;
    	//循环遍历,检查是否符合条件,如何符合则标记起来
    	for(int i = 0; i < s.size(); i++)
    	{
    		if(check[s[i] - 'a'])
    		{
    			flag[s[i] - 'a'] = true;
    		}
    		check[s[i] - 'a'] = true;
    	}
    	//循环判断,看标记起来的是否有符合条件的,如有则输出第一个仅出现一次的字符
    	for(int i = 0; i < s.size(); i++)
    	{
    		if(!flag[s[i] - 'a'])
    		{
    			cout << s[i];
    			return 0;
    		}
    	}
    	//如果没有输出no,并输出换行
    	cout << "no" <<endl;
    	return 0;
    }
    

    ★关于本题思路
    首先,我们要输入一个字符串,然后查找到第一个只出现一次的字符,说明我们需要循环遍历的查找,以及if条件语句的判断加成,那我们具体要怎么做呢?
    可以先枚举输入的字符串str每个字符(0 到 n−1),如果出现就标记check[str[i] - ‘a’]为true,然后如果枚举到一个字符它的check为true(被访问过),就把它的flag标记为true标记为不可以

    然后再次枚举每个字符,如果这个字符的flag为false(且只被访问过 1 次)
    那就直接输出,然后 return 0(这样就保证了是第一个而且只出现了一次)

    最后,如果没有 flag 为 false 的,就输出 no。
    了解了这些,可以尝试编程实现一下了。

    三、测试结果

    abcabd
    c
    
    --------------------------------
    Process exited after 6.674 seconds with return value 0
    请按任意键继续. . .
    

    Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
    如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心

  • 相关阅读:
    记一次centos磁盘扩容
    MODBUS协议下,能否实现MCGS触摸屏与FX5U之间无线通讯?
    openssl中SM2、SM3、SM4使用实例
    网络协议--ARP:地址解析协议
    canal 设置offset和binlog,POSITION
    [RootersCTF2019]I_<3_Flask-1|SSTI注入
    第八章 排序 一、排序的基本概念
    JSP课设:学生选课系统(附源码+调试)
    如何取消a链接点击时的背景颜色
    Jenkins代理模式配置Maven工程
  • 原文地址:https://blog.csdn.net/qq_51646682/article/details/127115143