zoukankan      html  css  js  c++  java
  • 【剑指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 ' ';
        }
    
  • 相关阅读:
    [Java] [Exception]
    [Go back to REDIS]
    [Java] [内存泄露]
    [ZK] [Related Materials]
    [Scala] [Coursera]
    <zk在大型分布式系统中的应用>
    [Java] [Lock] [Synchronized VS ReentrantLock]
    [Data Structure] Tree
    投影矩阵的计算过程
    SQL Server 2012
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860609.html
Copyright © 2011-2022 走看看