哈希表
哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表)。
哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。
要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。
当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。
数组
set (集合): Set 是唯一值的集合。每个值在 Set 中只能出现一次。一个 Set 可以容纳任何数据类型的任何值。 Set对象的方法有add(),delete(),has(),forEach()…
map (映射) :Map 对象存有键值对,其中的键可以是任何数据类型。Map 对象记得键的原始插入顺序。Map 对象具有表示映射大小的属性。
// Map对象的方法有为 Map 对象中的键设置值set(),获取 Map 对象中键的值(),返回键数据keys(),返回值数组values(),返回键值对数组entries()…
242.有效的字母异位词
方法一:数组实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| var isAnagram = function(s, t) { if(s.length !== t.length) return false; const resSet = new Array(26).fill(0); const base = "a".charCodeAt(); for(const i of s) { resSet[i.charCodeAt() - base]++; } for(const i of t) { if(!resSet[i.charCodeAt() - base]) return false; resSet[i.charCodeAt() - base]--; } return true; };
|
方法二:Map()实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var isAnagram = function(s, t) { if(s.length !== t.length) return false; let map = new Map() for(const char of s){ const times = map.get(char) || 0 map.set(char,times + 1) } for(const char of t){ const times = map.get(char) || 0 map.set(char,times - 1) } for(let item of map){ if(item[1] != 0){ return false } } return true };
|
方法二:Set()实现
// Set()实现,由于Set()不方便计数,这里未实现。