# 练习
# LeetCode.1.两数之和
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
let map = new Map()
for (let i = 0; i < nums.length; i++) {
let n = nums[i];
let s = target - n;
if (map.has(s)) {
return [map.get(s), i]
}
map.set(n, i)
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# LeetCode.3. 无重复字符的最长子串
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let map = new Map()
let p = 0;
let res = 0;
for (let i = 0; i < s.length; i++) {
let c = s[i];
if (map.has(c) && map.get(c) >= p) {
p = map.get(c) + 1
}
map.set(c,i)
res = Math.max(res, i - p + 1)
}
return res
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# LeetCode.76. 最小覆盖子串
/**
* @param {string} s
* @param {string} t
* @return {string}
*/
var minWindow = function (s, t) {
var l = 0, r = 0, need = new Map();
for (const c of t) {
need.set(c, need.get(c) ? need.get(c) + 1 : 1)
}
var needType = need.size;
var res = ""
while (r < s.length) {
const c = s[r];
if (need.has(c)) {
need.set(c, need.get(c) - 1);
if (need.get(c) === 0) needType--;
}
while (needType === 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) {
needType++
}
}
l++
}
r++
}
return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36