【劍指offer】50.第一個出現一次的字符

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 ' ';
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章