思路:哈希表存储 字符 到 出现次数的映射即可
class Solution {
public char firstUniqChar(String s) {
char[] chars = s.toCharArray();
Map<Character, Integer> dic = new HashMap<>();
for (char c : chars) {
dic.put(c, dic.getOrDefault(c, 0) + 1);
}
for (char c : chars) {
if (dic.get(c) == 1){
return c;
}
}
return ' ';
}
}
优化:使用数组来存储字符的出现次数,同时ASCII码为128个,可以使用int[] count
来代替哈希表,键就是字符对应的数,也就是该字符的ASCII码值,值就是该字符出现的次数。
class Solution {
public char firstUniqChar(String s) {
char[] chars = s.toCharArray();
int[] count = new int[128];
for (char ch : chars) {
count[ch]++;
}
for (char ch : chars) {
if (count[ch] == 1){
return ch;
}
}
return ' ';
}
}
优化,题目说只有小写字母,故我们只需要开一个大小为26的计数数组就可以了
class Solution {
public char firstUniqChar(String s) {
char[] chars = s.toCharArray();
int[] count = new int[26];
for (char ch : chars) {
int index = ch - 'a';
count[index]++;
}
for (char ch : chars) {
int index = ch - 'a';
if (count[index] == 1){
return ch;
}
}
return ' ';
}
}