LeetCode第二十题(有效的括号)

161 阅读1分钟

栈实现(Java)

核心思想: 利用栈来实现括号的匹配过程中,如果是左括号‘(’、‘[’和‘{’,则进栈,如果是右括号‘)’、‘]’和‘}’,则出栈(注意先判断栈是否为空),并判断出栈的左括号与当前右括号是否匹配,最后判断栈中是否还有尚未匹配成功而出栈的左括号,若有,则匹配失败,否则,匹配成功。

class Solution {
    public boolean isValid(String s) {
        //若字符串s的字符个数为奇数,则肯定匹配失败,否则,可能匹配成功
        if(s.length() % 2 == 1)
            return false;
        Stack<Character> stack = new Stack<>();
        int index = 0;
        while(index < s.length()){
            switch (s.charAt(index)){
                //如果是左括号‘(’、‘[’和‘{’,则进栈
                case '(':
                    stack.push(s.charAt(index));
                    break;
                case '[':
                    stack.push(s.charAt(index));
                    break;
                case '{':
                    stack.push(s.charAt(index));
                    break;
                //如果是右括号‘)’、‘]’和‘}’,则出栈(注意先判断栈是否为空),并判断出栈的左括号与当前右括号是否匹配
                case ')':
                    char ch_small = ' ';
                    if(!stack.empty())
                        ch_small = stack.pop();
                    if(ch_small != '(')
                        return false;
                    break;
                case ']':
                    char ch_middle = ' ';
                    if(!stack.empty())
                        ch_middle = stack.pop();
                    if(ch_middle != '[')
                        return false;
                    break;
                case '}':
                    char ch_big = ' ';
                    if(!stack.empty())
                        ch_big = stack.pop();
                    if(ch_big != '{')
                        return false;
                    break;
                default:
                    break;
            }
            index++;//匹配字符串s的下一个字符
        }
        //最后判断栈中是否还有尚未匹配成功而出栈的左括号
        return stack.empty();
    }
}