一、题目
在字符串 s
中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
二、示例
2.1> 示例 1:
【输入】s = "abaccdeff"
【输出】'b'
2.2> 示例 2:
【输入】s = ""
【输出】' '
限制:
0
<= s 的长度 <=50000
三、解题思路
- 根据题目描述,我们需要做到两点:
【第1点】找出字符串
s
中,每个字符的出现次数;【第2点】去重保存字符在
s
中的出现顺序;
- 那么针对上面的两点,我们创建两个变量:
【int[] times】用于记录字符串
s
中每个字符的出现次数;【char[] order】用于记录字符串
s
中字符的出现顺序;
- 具体的逻辑就是,首先遍历字符串
s
中的所有字符,然后保存在times
中,其中key
存储的是字符,value
存储的是该字符出现的次数;当发现某个字符第一次出现的时候,就将其保存到order
数组中; - 然后我们再遍历
order
数组,并根据times中记录的每个字符的出现次数,只要发现有字符出现次数是1次,那么就作为方法结果返回即可。 - 下面以s =
"abaccdeff"
为例,详细了解一下具体的处理过程。请见下图所示:
四、代码实现
classSolution { publiccharfirstUniqChar(Strings) { intindex=0; int[] times=newint[26]; char[] order=newchar[26]; for (charc : s.toCharArray()) { if (times[c-'a'] ==0) order[index++] =c; times[c-'a']++; } for (inti=0; i<order.length; i++) if (order[i] !=0&×[order[i] -'a'] ==1) returnorder[i]; return' '; } }
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」