题解 | #有效括号序列#

有效括号序列

https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

使用栈进行匹配,当栈顶元素为'('时,直接入栈,否则检查是否存在次栈顶元素,若不存在返回false。若存在次栈顶元素('(')且和栈顶元素(')')匹配,则将次栈顶元素弹出(与栈顶元素一同消去)。循环,直至遍历所有字符,当栈空时返回true,否则返回false。

import java.util.*;


public class Solution {
    /**
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        if (s.length() <= 1) return false;
        Stack<Character> stack = new Stack<Character>(); // 用于匹配最近成对的字符
        int i = 0;
        while (i < s.length()) { // 栈非空,说明还有尚未匹配的字符
            Character top = s.charAt(i++); // 当前元素
            if (top == ')' || top == ']' || top == '}') {
                if (stack.isEmpty()) return false; // 栈空,无法匹配
                if ((top == ')' && stack.peek() == '(') || (top == ']' && stack.peek() == '[') || (top == '}' && stack.peek() == '{') ) { // 匹配成功
                    stack.pop(); // 消除
                }
            } else {
                stack.push(top); // 入栈,等待后续匹配
            }
        }
        return stack.isEmpty(); // 栈空则匹配成功,否则匹配失败
    }
}
#括号匹配#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务