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类