LC-20:有效的括号

LC-20:有效的括号

                    

                    
    执行代码:
public class Demone {
    public static void main(String[] args) {
        System.out.println(isValid("()[]{}("));
    }
    public static boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            // 如果是左边的括号,就放在栈中
            if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
                stack.push(s.charAt(i));
            }
            // 如果是右边的括号,就将战中的括号弹出,进行对比
            if (s.charAt(i) == ')') {
                if (stack.isEmpty()) {return false;} // 为了防止栈中少对应的括号,导致空栈问题
                Character pop = stack.pop(); // 删除并返回
                if (pop != '(') {
                    return false;
                }
            } else if (s.charAt(i) == '}') {
                if (stack.isEmpty()) {return false;} // 为了防止栈中少对应的括号,导致空栈问题
                Character pop = stack.pop(); // 删除并返回
                if (pop != '{') {
                    return false;
                }
            } else if (s.charAt(i) == ']') {
                if (stack.isEmpty()) {return false;} // 为了防止栈中少对应的括号,导致空栈问题
                Character pop = stack.pop(); // 删除并返回
                if (pop != '[') {
                    return false;
                }
            }
        }
        // 如果栈中的数据不是null,就说明有多余的左括号。
        if (!stack.isEmpty()) {
            return false;
        }
        return true;
    }
}

算法思路:
        这个题的本质就是使用stack栈实现对括号进行匹配,对字符串进行遍历,如果是左括号的话,就放在栈中,如果是右括号,就需要在栈中弹出来一个元素,进行对比,在取一个元素之前,就需要对栈中的元素进行判空,就是为了实现里面有多余的右括号,并且还要判断多余的左括号咋判断?左括号其实就是没有右括号的匹配了,也就是说它烂在了栈中,所以我们只需要对栈中的元素内容进行判断空即可,如果不是空,就说明里面还有多余的括号,就说明,不是合法的。


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务