【剑指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 ' ';
    }
                                    
                    
                
                
            
        
浙公网安备 33010602011771号