Valid Parentheses

关于字符串配对的一个小问题以及简单优化。

Valid-Parentheses.js

const isValid = (input)=>{
    let stack = [];
    let length = input.length;
    for (let i = 0 ; i < length; i++) {
        let popChar = stack[stack.length-1];
        let char = input[i];
        if (char == '(' || char == '[' || char =='{' ) {
            stack.push(char);
        } else if ((popChar == '(' && char ==')') ||
            (popChar == '[' && char ==']') ||
            (popChar == '{' && char =='}')) {
            stack.pop();
        } else {
            return false;
        }
    }
    return stack.length ? false: true;
}

const isValidOptimization  = input => {
    let map = {
      "(":")",
      "[":"]",
      "{":"}"
    }
    let stack = [];
    let length = input.length;
    for (let i = 0 ; i < length; i++) {
        let popChar = stack[stack.length-1];
        let char = input[i];
        if (char == '(' || char == '[' || char =='{' ) {
            stack.push(char);
        } else if ((map[popChar] == char)) {
            stack.pop();
        } else {
            return false;
        }
    }
    return stack.length ? false: true;
}
console.log(isValidOptimization('()'));
console.log(isValidOptimization('(){}[]'));
console.log(isValidOptimization('(]'));
console.log(isValidOptimization(''));
console.log(isValidOptimization('([)]'));
console.log(isValidOptimization('([])'));


console.log(isValid('()'));
console.log(isValid('(){}[]'));
console.log(isValid('(]'));
console.log(isValid(''));
console.log(isValid('([)]'));
console.log(isValid('([])'));

// 两个原则,
// 第一是如果是左边的符号则直接入栈;
// 第二是取出栈顶元素判断是否闭合符号,如果是的话,直接出栈
// 最后判断栈是否为空,如果为空,那么就匹配,否则不匹配

版权声明:著作权归作者所有。

thumb_up 0 | star_outline 0 | textsms 0