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

题目描述

给定一个只包括 '(',')','{','}','[',']' 的字符串 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();
    }
posted @ 2021-05-05 21:50  迁承_0204  阅读(64)  评论(0编辑  收藏  举报