「No.04」【 每日壹题 】
Visionwuwu 2021-01-27
算法
javascript
LeetCode算法题之-俩个正序数组的中位数
# LeetCode算法题之-俩个正序数组的中位数
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
# 示例
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
1
2
3
2
3
# 思路
- 创建一个新的节点作为链表头,将dummy指向当前节点
- 定义一个临时变量curr指向dummy
- 定义一个变量carry用来表示俩数相加是否需要进位 0 表示不进位 1表示进位
- 当l1或l2存在时需要循环遍历,拿到链表的每个节点的值相加,
- l1或l2的存在就取对应节点的值相加,还需加上当前进位数,得到相加结果sum
- 判断是否需要进位,第一种如果sum >= 10需要进位,第二种carry = Math.floor(sum / 10)
- 每个节点只能存放一位数所以,需要取sum的个位数存放到新的节点,有俩种方式: 第一种sum - 10,第二种sum % 10
- 将curr向前进一位指向新的节点
- l1和l2向后移一位指向下一个节点
- 当俩个链表到头了,需要在检查一下carry如果是1需要附加一个节点把1存放进去
- 最后在返回dummy.next,也就是最后链表的头
# 参考答案
详细信息
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
const set = new Set()
let i = 0, j = 0, maxLength = 0
if (s.length === 0) return 0
for (i; i < s.length; i++) {
if (set.has(s[i])) {
set.delete(s[j])
j++
while (set.has(s[i])) {
set.delete(s[j])
j++
}
set.add(s[i])
} else {
set.add(s[i])
maxLength = Math.max(maxLength, set.size)
}
}
return maxLength
}
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25