📌  相关文章
📜  国际空间研究组织 | ISRO CS 2020 |问题 53(1)

📅  最后修改于: 2023-12-03 15:37:16.245000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2020 |问题 53

问题描述

给定一个由括号组成的字符串,判断该字符串是否是有效的括号序列。

示例

输入: "({})[]"

输出:有效

输入: "({[]})}[]"

输出:无效

思路
  • 首先我们需要新建一个栈
  • 遍历字符串,如果当前字符为左括号,则将其入栈
  • 否则,如果栈为空,则说明该右括号无法对应一个左括号,返回无效
  • 如果栈非空,则从栈顶弹出一个左括号,与当前右括号进行匹配
  • 如果匹配成功,则继续遍历
  • 如果匹配失败,则返回无效
  • 遍历完字符串后,如果栈为空,则说明序列有效,否则,序列无效
代码
public static boolean isValid(String s) {
    Stack<Character> stack = new Stack<>();
    for(int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if(c == '(' || c == '[' || c == '{') {
            stack.push(c);
        } else {
            if(stack.isEmpty()) {
                return false;
            }
            char top = stack.pop();
            if((c == ')' && top != '(') ||
               (c == ']' && top != '[') ||
               (c == '}' && top != '{')) {
                return false;
            }
        }
    }
    return stack.isEmpty();   
}

以上代码在 Java 中实现了简单有效的括号序列检测算法,时间复杂度为 O(n)。