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

Posted take-it-easy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类

 

以上是关于LeetCode 哈希表 387. 字符串中的第一个唯一字符(计数哈希表,字符串)的主要内容,如果未能解决你的问题,请参考以下文章

HashTable - 哈希表 - 细节狂魔

LeetCode|387. 字符串中的第一个唯一字符

前端与算法 leetcode 387. 字符串中的第一个唯一字符

leetcode-387-字符串中的第一个唯一字符

leetcode python 387. 字符串中的第一个唯一字符 383. 赎金信

leetcode——387. 字符串中的第一个唯一字符