Skip to content

Commit 82abc55

Browse files
author
luzhipeng
committed
�更新答案
1 parent 3c288dd commit 82abc55

5 files changed

+63
-5
lines changed

Diff for: README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ leetcode题解,记录自己的leecode解题之路。
33

44
## 传送门
55
### 中等难度
6-
- [Add Two Numbers](https://github.com/azl397985856/leetcode/blob/master/addTwoNumbers.md)
7-
- [Longest Substring Without Repeating Characters](https://github.com/azl397985856/leetcode/blob/master/longestSubstringWithoutRepeatingCharacters.md)
8-
- [Longest Palindromic Substring](https://github.com/azl397985856/leetcode/blob/master/longestPalindromicSubstring.md)
6+
- [2. Add Two Numbers](https://github.com/azl397985856/leetcode/blob/master/addTwoNumbers.md)
7+
- [3. Longest Substring Without Repeating Characters](https://github.com/azl397985856/leetcode/blob/master/longestSubstringWithoutRepeatingCharacters.md)
8+
- [5. Longest Palindromic Substring](https://github.com/azl397985856/leetcode/blob/master/longestPalindromicSubstring.md)
99

10-
### 高级难度
10+
### 高级难度

Diff for: addTwoNumbers.md

+13
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ Explanation: 342 + 465 = 807.
1515
```
1616
## 思路
1717

18+
设立一个表示进位的变量carried,建立一个新链表,
19+
把输入的两个链表从头往后同时处理,每两个相加,将结果加上carried后的值作为一个新节点到新链表后面。
20+
21+
![2.addTwoNumbers](./assets/2.addTwoNumbers.gif)
22+
23+
(图片来自: https://github.com/MisterBooo/LeetCodeAnimation)
24+
25+
## 关键点解析
26+
27+
1. 链表这种数据结构的特点和使用
28+
29+
2. 用一个carried变量来实现进位的功能,每次相加之后计算carried,并用于下一位的计算
30+
1831
## 代码
1932
```js
2033
/**

Diff for: assets/2.addTwoNumbers.gif

305 KB
Loading
173 KB
Loading

Diff for: longestSubstringWithoutRepeatingCharacters.md

+46-1
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,58 @@ Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer
1111
```
1212
## 思路
1313

14+
用一个hashmap来建立字符和其出现位置之间的映射。
15+
16+
维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的大小,窗口不停的向右滑动。
17+
18+
(1)如果当前遍历到的字符从未出现过,那么直接扩大右边界;
19+
20+
(2)如果当前遍历到的字符出现过,则缩小窗口(左边索引向右移动),然后继续观察当前遍历到的字符;
21+
22+
(3)重复(1)(2),直到左边索引无法再移动;
23+
24+
(4)维护一个结果res,每次用出现过的窗口大小来更新结果res,最后返回res获取结果。
25+
26+
![3.longestSubstringWithoutRepeatingCharacters](./assets/3.longestSubstringWithoutRepeatingCharacters.gif)
27+
28+
(图片来自: https://github.com/MisterBooo/LeetCodeAnimation)
29+
30+
## 关键点
31+
32+
1. 用一个mapper记录出现过并且没有被删除的字符
33+
2. 用一个滑动窗口记录当前index开始的最大的不重复的字符序列
34+
3. 用res去记录目前位置最大的长度,每次滑动窗口更新就去决定是否需要更新res
35+
1436
## 代码
1537
```js
1638
/**
1739
* @param {string} s
1840
* @return {number}
1941
*/
2042
var lengthOfLongestSubstring = function(s) {
21-
43+
const mapper = {}; // 记录已经出现过的charactor
44+
let res = 0;
45+
let slidingWindow = [];
46+
47+
for (let c of s) {
48+
if (mapper[c]) {
49+
// 已经出现过了
50+
// 则删除
51+
const delIndex = slidingWindow.findIndex(_c => _c === c);
52+
53+
for (let i = 0 ; i < delIndex; i++) {
54+
mapper[slidingWindow[i]] = false;
55+
}
56+
57+
slidingWindow = slidingWindow.slice(delIndex + 1).concat(c);
58+
} else {
59+
// 新字符
60+
if (slidingWindow.push(c) > res) {
61+
res = slidingWindow.length;
62+
}
63+
}
64+
mapper[c] = true;
65+
}
66+
return res;
2267
};
2368
```

0 commit comments

Comments
 (0)