剑指 Offer 50. 第一个只出现一次的字符

题目描述

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

输入输出

1
2
3
4
5
输入:s = "abaccdeff"
输出:'b'

输入:s = ""
输出:' '

大致思路

利用HashMap存储 key是字母 value是是否存在多次此字母 存在为false 只有一次为true

1
2
3
a -> true
b -> true
a -> false(出现第二次就改了)

java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public char firstUniqChar(String s) {
HashMap<Character, Boolean> hm = new HashMap<>();
char[] ac = s.toCharArray();
for(char c:ac){
hm.put(c, !hm.containsKey(c));
}
for(char c:ac){
if(hm.get(c)){
return c;
}
}
return ' ';
}
}