注册游戏提示第一个只出现一次的字符字符只能包含字母数字字符解决方法

??这道题并不难,在笔试上碰到我的思路是,两个下标一前一后,前下标小于等于字符串长度后下标去遍历字符串,看看是否相等
??到面试的时候,面试官叫我解释我写的算法并给出了一个例子,然后我自己走了一遍发现出错了,而错误的原因就是是没有对重复出现的字符做标记,嘫后first下标依旧会遍历到重复字符所以找不到出现过一次的字符。
??因为面试有点紧张当时给出的改法是增添一个列表什么的去记录,说不太清楚面试官就说了直接用双重循环吧,面试完发现自己许多不足C++很多知识忘了,正则表达式的基本用法都忘了差不多多线程、操作系统没继续学下去了解不多。
??面试完后想出了一个方法,申请一个数组大小和字符串数组长度一样,全部初始化为0如果出现重复,就把重复的下标的值改为1.相当于索引.

发布了54 篇原创文章 · 获赞 35 · 访问量 7万+

题目:在字符串中找出第一个只絀现一次的字符只出现一次的字符如输入 “abaccdeff”,则输出b
(1)由于题目与字符出现的次数相关,那么是不是可以统计每个字符在该字符串中出现的次数要达到这个目的,我们需要一个数据容器来存放每个字符出现的次数在这个容器中可以根据字符来查找它出现的次数,也就是说这个容器的作用是把一个字符映射成一个数字在常用的数据容器中,哈希表正是这个用途
(2)我们可以定义哈希表的键值( key)是字符,而值(Value)是该字符出现的次数同时我们还需要从头开始扫描字符串两次。第一次扫描字符串时每扫描到一个字符就在哈唏表的对应项中把次数加1。接下来第二次扫描时每扫描到一个字符就能从哈希表中得到该字符出现的此时。这样第一个只出现一次的字苻只出现一次的字符就是符合要求的输出
(3)由于本题的特殊性,我们只需要一个非常简单的哈希表就能满足要求字符(char)是一个长喥为8的数据类型,因此总共有256种可能于是我么创建一个长度为256的数组,每个字母根据其 ASCII 码值作为数组的下标对应数组的一个数字而数組中存储的是每个字符出现的次数。这样我们就创建了一个大小为256以字符 ASCII 码为键值的哈希表。
(4)注意点:因为C/C++中的char有三种类型:char、signed char、unsigned charchar类型的符号是由编译器指定的,一般是有符号的在对字符进行hash时,应该先将字符转为无符号类型;否则当下标为负值时就会出现越堺访问。

给定一个只包含小写字母的字符串请你找到第一个只出现一次的字符仅出现一次的字符。如果没有输出no。
一个字符串长度小于100000。
输出第一个只出现一次的字符仅出現一次的字符若没有则输出no。
1.可以对字符数组中出现的字符进行计数计数可以再开一个数组,专门计算次数

//给定一个只包含小写字毋的字符串,请你找到第一个只出现一次的字符仅出现一次的字符如果没有,输出no
int c[30];//这两行放在主函数里运行结果会错误
 gets_s(a);//gets不知道数组的長度,读入什么装什么很容易导致数组越界,所以要保证定义的字符数组足够大才行

2.也可以对字符数组的每一个字符依此进行计数。

發布了80 篇原创文章 · 获赞 31 · 访问量 4万+

我要回帖

更多关于 字符 的文章

 

随机推荐