第一次只出现一次的字母
题目:在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
哈希表
代码
class Solution {
public char firstUniqChar(String s) {
HashMap<Character, Boolean> dic = new HashMap<>();
char[] sc = s.toCharArray();
for(char c : sc)
dic.put(c, !dic.containsKey(c));
for(char c : sc)
if(dic.get(c)) return c;
return ' ';
}
}
作者:jyd
总结
- HashMap是指在解决哈希冲突时采用了连地址法,即数组+链表的方式。数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。HashMap的主干是一个Entry数组,Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。(所谓Map其实就是保存了两个对象之间的映射关系的一种集合)。
get()方法:通过key值返回对应value,如果key为null,直接去table[0]处检索。 - containsKey() 方法:判断HashMap中某个键是否存在。
有序哈希表?
代码
class Solution {
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 ' ';
}
}
作者:jyd
总结
- LinkedHashMap() 方法:将所有Entry节点链入一个双向链表的HashMap。