【温故知新】'20有效的括号' 利用栈先进后出原则

259 阅读1分钟

题目描述

有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

stack 栈先进后出

  • 定义一个map对象,将左括号作为key值,右括号作为value值;
  • 利用栈先进后出的原则;定义栈stack;
  • 遍历括号字符串s;
    • 如果是左括号则将map中对应的右括号入栈;
    • 否则,遇到右括号,判断当前遍历的右括号是否和栈顶元素相等;
      • 如果不相等,则返回false;
  • 遍历结束,判断栈stack是否为空;
    • stack为空则代表有效括号
    • 否则代表无效括号

代码

let map: any = {
    '{' : '}',
    '(' : ')',
    '[' : ']'
}

function isValid(s: string): boolean {

    let stack: string[] = [];
    let top: string | undefined;

    for(let char of s){
        let value;
        if((value = map[char])){
            stack.push(value);
        }else{
            top = stack.pop();
            if(top !== char){
                return false;
            }
        }
    }

    return !stack.length;
}