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 ' ';
}