原题地址:. – 力扣(LeetCode)

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"输出:true

示例2:

输入:s = "()[]{}"输出:true

示例3:

输入:s = "(]"输出:false

使用栈

判断括号的有效性,这是一个非常经典的问题。

由于给定字符串中只包含 ‘(‘,’)’,'{‘,’}’,'[‘,’]’,所以我们不需要额外考虑非法字符的问题。

对于合法的输入字符,关键在于遇到一个“左括号”时,我们会希望在后续的遍历中,遇到一个相同类型的“右括号”将其闭合。

由于规则是:后遇到的左括号,要先闭合,因此我们想到,利用一个可以实现这个功能,将左括号放入栈顶,遇到右括号时弹出就可以了。

public boolean isValid(String s) {Deque stack = new LinkedList();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);// 遇到左括号则压入右括号if (c == '(') {stack.push(')');} else if (c == '{') {stack.push('}');} else if (c == '[') {stack.push(']');} else {// 遇到右括号则出栈,如果和出栈的字符不一致则不满足条件if (stack.isEmpty()) return false;if (!stack.pop().equals(c)) return false;}}// 栈是空的则说明完全匹配return stack.isEmpty();}