哈希表的理解和运用
哈希表的几个重要方法:
1public synchronized Object get(Object key)
根据给定关键字key获取相对应的对象。
2.public synchronized boolean containsKey(Object key)
判断哈希表中是否包含关键字key。
3.public synchronized boolean contains(Object value)
判断value是否是哈希表中的一个元素。
4.public Set<K> keySet()
用来获取包含在这个哈希表的键的Set视图
解决思路:两次扫描:第一次:在哈希表中更新一个字符出现的次数,时间复杂度时O(1),长度为n的字符串,时间复杂度是O(n);第二次扫描,同样O(1)能读出一个字符出现的次数,所以也需要O(n);
所以最后的时间复杂度是O(n);
代码:
import java.util.LinkedHashMap;
/**题目描述:在字符串中找到第一个只出现一次的字符
* 输入:"abaccdeff"
* 输出:b
* Created by lxq on 2017/9/8.
*/
public class Problem5 {
public static void main(String[] args){
Problem5 problem5 = new Problem5();
System.out.println(problem5.firstNotRepeatChar("abaccdeff"));
}
public Character firstNotRepeatChar(String str){
if(str==null)
return null;
char[] strChar = str.toCharArray();
//字符和她出现的次数映射关系
LinkedHashMap<Character,Integer> hash = new LinkedHashMap<Character, Integer>();
for(char item:strChar){
if(hash.containsKey(item)){
hash.put(item,hash.get(item)+1);//根据key得到value 计数器
}else {
hash.put(item,1);
}
}
//循环键值集合 hash.keySet()
for(char key:hash.keySet()){
if(hash.get(key)==1){ //查询字符对应的次数是否为1
return key;
}
}
return null;
}
}