返回轨道
算法 · 2026-05-14 · 21 阅读

P45 有效的括号序列

算法 21 阅读

信号摘要

难度:Easy · 时长:05:51 · leetcode 20 · lintcode 423

P45 有效的括号序列

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你一个括号序列,里面包含小括号,中括号和大括号。你要判断这个括号序列是否有效。有效的括号序列要求,每个左括号都必须有一个同类的右括号与它正确配对。另外,空字符串认为是有效的括号序列。

比如说,给你的序列是:

()[]{}

小括号/中括号/大括号的左右括号都能正确配对,因此这是一个有效的括号序列。

再比如说给你的序列是:

([)]

这里面虽然正好有一对小括号和一对中括号,但它们的顺序不对,括号间无法正确配对,因此这不是一个有效的括号序列。

代码

public class AlgoCasts {

  // Time: O(n), Space: O(n)
  public boolean isValidBrackets(String s) {
    Stack<Character> stack = new Stack<>();

    for (int i = 0; i < s.length(); ++i) {
      if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
        stack.push(s.charAt(i));
      } else if (stack.isEmpty()) {
        return false;
      } else {
        if (s.charAt(i) == ')' && stack.peek() != '(') return false;
        if (s.charAt(i) == ']' && stack.peek() != '[') return false;
        if (s.charAt(i) == '}' && stack.peek() != '{') return false;
        stack.pop();
      }
    }
    return stack.isEmpty();
  }

  // Time: O(n), Space: O(n)
  public boolean isValidBracketsShort(String s) {
    Stack<Character> stack = new Stack<>();

    for (int i = 0; i < s.length(); ++i) {
      if (s.charAt(i) == '(') stack.push(')');
      else if (s.charAt(i) == '[') stack.push(']');
      else if (s.charAt(i) == '{') stack.push('}');
      else if (stack.isEmpty() || s.charAt(i) != stack.pop()) return false;
    }
    return stack.isEmpty();
  }

}

📡 通讯频道