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<iostream>
#include<cstring>
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)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心