一、题目
在字符串 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"
为例,详细了解一下具体的处理过程。请见下图所示:
四、代码实现
代码语言:javascript复制class Solution {
public char firstUniqChar(String s) {
int index = 0;
int[] times = new int[26];
char[] order = new char[26];
for (char c : s.toCharArray()) {
if (times[c - 'a'] == 0) order[index ] = c;
times[c - 'a'] ;
}
for (int i = 0; i < order.length; i )
if (order[i] != 0 && times[order[i] - 'a'] == 1) return order[i];
return ' ';
}
}