50.第一个出现一次的字符
面试题50. 第一个只出现一次的字符
难度简单14
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
示例:
s = "abaccdeff" 返回 "b" s = "" 返回 " "
1.哈希表
/*
*1.哈希表
a.使用hashmap来存储 key为字符,value为true or false
1)true -> 该字符为一个
2) false -> 该字符不为一个
b.loop map 找到第一个数量为1的字符 return
c.直接 return '';
time : O(n)
space : O(n)
*/
public char firstUniqChar(String s) {
Map<Character,Boolean> dataMap = new HashMap<>();
char [] chs = s.toCharArray();
for(char ch: chs){
dataMap.put(ch,!dataMap.containsKey(ch));
}
for(char ch : chs){
if(dataMap.get(ch))
return ch;
}
return ' ';
}
2.有序hash表
/*
* 2.有序hash表
思路:hash表有去重的特点,当数据比较大的时候 我们直接从hash中查找第一个value为true的值就可以了。
time : O(n) 而前者为O(2n)
*/
public char firstUniqChar(String s) {
Map<Character, Boolean> dic = new LinkedHashMap<>();
char[] sc = s.toCharArray();
for(char c : sc)
dic.put(c, !dic.containsKey(c));
for(Map.Entry<Character, Boolean> d : dic.entrySet()){
if(d.getValue()) return d.getKey();
}
return ' ';
}