题一:求数组旋转K步后的数组,比如数组[1, 2, 3, 4, 5, 6, 7] 旋转3步,为[5, 6, 7, 1, 2, 3, 4]。 思路1:从K步起的尾部弹出,插入到头部
function rotate1(arr, k) {
const len = arr.length
const max = len - k-1
for (let i=len-1; i>max; i--) {
const a = arr.pop()
if(a) {
arr.unshift(a)
}
}
return arr
}
思路2:以K为起点,分割数组,concat连接
function rotate2(arr, k) {
const arr2 = arr.slice(-k)
const arr3 = arr.slice(0, arr.length-k)
const newArr = arr2.concat(arr3)
return newArr
}
题二:判断字符串是否匹配括号,比如(a{b}c)匹配,{a(b则为不匹配
const str = "(a{b[d)]})"
function isMatch(leftBracket, rightBracket) {
if(leftBracket === "{" && rightBracket === "}") return true
if(leftBracket === "[" && rightBracket === "]") return true
if(leftBracket === "(" && rightBracket === ")") return true
return false
}
function isMatchBracket(str) {
debugger
const stack = []
const len = str.length
const left = "[{("
const right = "]})"
for (let i=0; i<len; i++) {
const s = str[i]
if(left.includes(s)) {
stack.push(s)
} else if (right.includes(s)) {
const strEnd = stack[stack.length -1]
if(isMatch(strEnd, s)) {
stack.pop()
} else {
return false
}
}
}
return stack.length === 0
}