字典简介
- 与集合类型,字典也是一种存储唯一值的数据结构,但它是以键值对的形式存储的
- ES6 中有字典,名为Map
- 常用操作:键值对的增删改查
const m = new Map();
m.set("name", "掘金");
m.set("age", 18).set("gender", 1);
m.delete("name");
m.delete("name1");
m.set("age", 19);
m.get("name1");
m.get("age");
m.clear();
m.size;
leetcode-cn.com 算法题实战
完整题目请打开 leetcode

解题思路
- 求nums1 和 nums2 都有的值
- 使用字典建立 nums1 的唯一值映射
- 循环nums2 把在映射中的值放入数组中,并把找到的值相应映射删除
var intersection = function(nums1, nums2) {
const m = new Map();
const arr = [];
for(let c of nums1) {
m.set(c,true);
}
for(let c of nums2) {
if(m.has(c)) {
arr.push(c);
m.delete(c)
}
}
return arr;
};

解题思路
- 先找出所有的包含T的子串
- 找出长度最小的那个子串
- 用双指针维护一个滑动的窗口
- 移动右指针,找到包含T的子串,移动左指针,尽量减少包含T的子串的长度
var minWindow = function(s, t) {
let l = 0;
let r = 0;
let res = '';
const need = new Map();
for(let i of t) {
need.set(i, need.get(i) ? need.get(i) + 1 : 1)
}
let needTypeLength = need.size;
while(r < s.length) {
const c = s[r];
if(need.has(c)) {
need.set(c, need.get(c) - 1);
if(need.get(c) === 0) {
needTypeLength -= 1;
}
}
while(needTypeLength === 0){
let newRes = s.substring(l, r +1);
if(!res || newRes.length < res.length) {
res = newRes;
}
const c2 = s[l];
if(need.has(c2)){
need.set(c2, need.get(c2) + 1 );
if(need.get(c2) === 1) {
needTypeLength += 1;
}
}
l += 1;
}
r+= 1;
}
return res;
};
下一站 树