码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-06-24 23:55:48      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:image   int   直接   pre   The   appears   map   默认   else   

技术图片

 

 

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

思路就是建立一个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. 字符串中的第一个唯一字符(计数哈希表,字符串)

标签:image   int   直接   pre   The   appears   map   默认   else   

原文地址:https://www.cnblogs.com/take-it-easy/p/13190350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!