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栈实现对括号进行匹配,对字符串进行遍历,如果是左括号的话,就放在栈中,如果是右括号,就需要在栈中弹出来一个元素,进行对比,在取一个元素之前,就需要对栈中的元素进行判空,就是为了实现里面有多余的右括号,并且还要判断多余的左括号咋判断?左括号其实就是没有右括号的匹配了,也就是说它烂在了栈中,所以我们只需要对栈中的元素内容进行判断空即可,如果不是空,就说明里面还有多余的括号,就说明,不是合法的。


全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务