刷题笔记一

52 阅读1分钟

题一:求数组旋转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
}