• LeetCode 哈希表 387. 字符串中的第一个唯一字符(计数哈希表,字符串)


     啊,是较简单的一题呢。有一些操作再熟悉一下。

    思路就是建立一个HashMap用于计数,然后再遍历就行。时间空间复杂度都是ON

    自己写的代码如下:

    class Solution {
        public int firstUniqChar(String s) {
            HashMap<Character,Integer> map=new HashMap<Character,Integer>();
            for(int i=0;i<s.length();i++)
            {
                if(map.containsKey((Character)s.charAt(i)))
                {
                    map.put(s.charAt(i),map.get(s.charAt(i))+1);
    
                }
                else
                {
                    map.put(s.charAt(i),1);
                }
            }
            for(int i=0;i<s.length();i++)
            {
                if(map.get(s.charAt(i))==1)
                {
                    return i;
                }
                
            }
            return -1;
        }
    }

    官方给的答案如下:

    class Solution {
        public int firstUniqChar(String s) {
            HashMap<Character, Integer> count = new HashMap<Character, Integer>();
            int n = s.length();
            // build hash map : character and how often it appears
            for (int i = 0; i < n; i++) {
                char c = s.charAt(i);
                count.put(c, count.getOrDefault(c, 0) + 1);
            }
            
            // find the index
            for (int i = 0; i < n; i++) {
                if (count.get(s.charAt(i)) == 1) 
                    return i;
            }
            return -1;
        }
    }

    关于HashMap中几个点注意一下

    map.getOrDefault(c,0)这个api很好用,查不到值的时候直接返回默认值,就不用再节外生枝搞个判断了。

    map.constainsKey()这个api注意一下。

    关于字符串几个点注意一下:

    str.charAt(i) 直接以char类型返回索引处的字母

    或者可以str.substring(i,i+1)

    HashMap中放的是封装类:Character类

  • 相关阅读:
    seajs模块化开发
    agularJs 路由
    sass
    web工作流
    lufylegend游戏引擎
    canvas游戏之贪食蛇
    [bzoj3743 Coci2015] Kamp(树形dp)
    [bzoj2662 BeiJing wc2012] 冻结 (分层图+最短路)
    [luogu2680] 运输计划 (lca+二分+树上差分)
    [luogu1463 HAOI2007] 反素数 (约数)
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/13190350.html
Copyright © 2020-2023  润新知