DAY 32 leetcode 242--哈希表.有效的字母异位词
哈希表理论基础
一般哈希表都是用来快速判断一个元素是否出现集合里。
要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。
一般哈希冲突(两个数据映射到了同一个下标下)有两种解决方法, 拉链法和线性探测法。
常见的哈希结构
数组
set (集合)
map(映射)
哈希表支持的操作
put(String key,Integer value): 向哈希表中添加一个新的键值对。
get(Object key): 根据给定的键返回对应的值,如果不存在则返回 null。
remove(Object key): 删除键对应的键值对,并返回被删除的值。
containsKey(Object key): 检查哈希表是否包含指定的键。
containsValue(Object value): 检查哈希表是否包含至少一个指定的值。
size(): 返回哈希表中键值对的数量。
isEmpty(): 检查哈希表是否为空。
题号242
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
用普通数组写
class Solution {public boolean isAnagram(String s, String t) {int size=s.length();//数组是最简单的哈希表if(size!=t.length())return false;int []record=new int [26];//用来记录的数组for(int i=0;i<size;i++){record[s.charAt(i)-'a']++;//在对应的字母下标下加加}for(int i=0;i<size;i++){record[t.charAt(i)-'a']--;}for(int i=0;i<26;i++){if(record[i]!=0)//record数组中有不是0的说明不同return false;}return true;}
}
创建一个哈希表
class Solution {public boolean isAnagram(String s, String t) {int size=s.length();if(size!=t.length())return false;//创建哈希表HashMap<Character,Integer> dic=new HashMap<>();for(int i=0;i<size;i++){dic.put(s.charAt(i),dic.getOrDefault(s.charAt(i),0)+1);}for(int i=0;i<size;i++){dic.put(t.charAt(i),dic.getOrDefault(s.charAt(i),0)-1);}for(int val:dic.values())//声明了一个循环变量 val,它在每次迭代中都会被赋值为 dic 中的下一个值。{if(val!=0)return false;}return true;}
}