算法 - 栈和队列 - 有效的括号

81 阅读1分钟

20. 有效的括号 - 力扣(LeetCode)

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

有效字符串需满足:

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

示例 1:

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

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

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

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

解答: 使用栈结构,遇到左括号,就压栈;遇到右括号,比较前一位(peek),如果是成对的括号,就弹栈。 如果都是成对的,最后栈应该是空的。

class Solution {
    public boolean isValid(String s) {
        char[] chars = s.toCharArray();
        if(chars.length%2 != 0){
            return false;
        }

        Stack<Character> stack = new Stack();
        for(int i = 0; i < chars.length; i++){
            char c = chars[i];
            Character peek = null;
            if(stack.isEmpty()){
                stack.push(c);
                continue;
            }else {
                peek = stack.peek();
                stack.push(c);
            }
            
            if(c == ')' && peek == '('){
                stack.pop();
                stack.pop();
            }
            else if(c == ']' && peek == '['){
                stack.pop();
                stack.pop();
            }
            else if(c == '}' && peek == '{'){
                stack.pop();
                stack.pop();
            }

        }
        return stack.isEmpty();
    }
}