首页 > 其他 > 详细

题目:20. 有效的括号(三种方法)

时间:2021-05-06 09:33:31      阅读:20      评论:0      收藏:0      [点我收藏+]

题目描述

给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

方法一:直接利用String的特性

    public boolean isValid(String s) {
        while (s.contains("()") || s.contains("[]") || s.contains("{}")) {
            s = s.replace("()", "");
            s = s.replace("[]", "");
            s = s.replace("{}", "");
        }
        return s.isEmpty();
    }

方法二:利用数据结构栈的特性

    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            if (s.charAt(i) == ‘(‘ || s.charAt(i) == ‘[‘ || s.charAt(i) == ‘{‘) {
                stack.push(s.charAt(i));
            } else {
                if (stack.isEmpty()) return false;
                char temp = stack.pop();
                if (temp == ‘(‘ && s.charAt(i) != ‘)‘) return false;
                if (temp == ‘[‘ && s.charAt(i) != ‘]‘) return false;
                if (temp == ‘{‘ && s.charAt(i) != ‘}‘) return false;
            }
        }
        return stack.isEmpty();
    }

方法三:利用栈和Map字典的映射关系

    public boolean isValid(String s) {
        Map<Character, Character> map = new HashMap<>();
        map.put(‘(‘, ‘)‘);
        map.put(‘[‘, ‘]‘);
        map.put(‘{‘, ‘}‘);

        Stack<Character> stack = new Stack<>();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            if (map.containsKey(s.charAt(i))) {
                stack.push(s.charAt(i));
            } else {
                if (stack.isEmpty()) return false;
                char temp = stack.pop();
                if (map.get(temp) != s.charAt(i)) return false;
            }
        }
        return stack.isEmpty();
    }

题目:20. 有效的括号(三种方法)

原文:https://www.cnblogs.com/init-qiancheng/p/14732904.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!