LeetCode 20 Valid Parentheses 有效的括弧 Java
题目:给定一个由 一系列括号 '(','{','[',')','}',']'组成的字符串,要求判断括号是否有效。
示例1:"()",有效
示例2:"{}[]([])",有效
示例3:"{[}]",无效。
解题思路:判断括弧是否有效的依据为,右括弧必须有对应的左括弧与之形成闭合,且顺序正确。所以此处我们可以用栈先进后出的特性进行解题。
1.当我们获取到左括弧时,将其压入栈中;
2.当我们获取到右括弧时,取最后进入栈中的左括弧进行配对,若配对失败则无效;此处需注意,如果栈中为空,证明没有左括弧与之形成配对,所以也是无效的括弧。
3.当我们遍历完所有括弧后,若栈为空,证明全部配对完成,是有效的括弧,反之无效。
代码:
class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<Character>(); //将字符串转成字符数组并遍历 char[] chars = s.toCharArray(); for (char c : chars) { //遇见左括弧,将其压入栈中 if (c == '{' || c == '(' || c == '[') { stack.push(c); } //遇见右括弧 else { //如果栈为空,证明没有左括弧可以与该右括弧配对 if (stack.isEmpty()) { return false; } //取栈中最后一个括弧与之配对 char top = stack.pop(); if (top == '(' && c != ')') { return false; } if (top == '[' && c != ']') { return false; } if (top == '{' && c != '}') { return false; } } } //遍历完括弧后,若栈为空证明全部配对完成,是有效括弧,反之无效 return stack.isEmpty(); } }