1、有效的括号
function isValid(s) {
// 栈
const stack = []
const map = {
')': '(',
']': '[',
'}': '{',
}
for (let char of s) {
// 匹配右括号
if (map[char]) {
// 栈空或者栈顶不匹配
if (stack.length === 0 || stack.pop() !== map[char]) {
return false
}
} else {
stack.push(char)
}
}
return stack.length === 0
}
console.log(isValid('{()()[]}'))
2、合并数组区间
function merge(arr) {
// 数组为空
// if(arr.length === 0) return []
arr.sort((a, b) => a[0] - b[0])
let res = [arr[0]]
for (let i = 1; i < arr.length; i++) {
const last = res[res.length - 1]
const curr = arr[i]
if (curr[0] < last[1]) {
// 合并重叠
last[1] = Math.max(curr[1], last[1])
} else {
res.push(curr)
}
}
return res
}
console.log(
merge([
[1, 7],
[2, 6],
[8, 15],
]),
)
3、无重复最长字符串长度
function longlength(str) {
// 滑动窗口,双指针
let left = 0
let maxLen = 0
const set = new Set()
for (let right = 0; right < str.length; right++) {
while (set.has(str[right])) {
set.delete(str[left])
left++
}
set.add(str[right])
maxLen = Math.max(maxLen, right - left + 1)
}
return maxLen
}
console.log(longlength('abcab'))