LeetCode 栈与队列篇

时间:2020-05-29
本文章向大家介绍LeetCode 栈与队列篇,主要包括LeetCode 栈与队列篇使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true

solution1 往stack放右括号

class Solution {
    public boolean isValid(String s) {
        //整一个栈
        Stack<Character> stack = new Stack<Character>();
        for (char c : s.toCharArray()) {
            if (c == '{') stack.push('}');
            else if (c == '[') stack.push(']');
            else if (c == '(') stack.push(')');
            else if (stack.isEmpty() || stack.pop() != c) return false;
        }
        return stack.isEmpty();
    }
}

solution2 往stack放左括号

class Solution {
    public boolean isValid(String s) {
        if (s.length() == 0) return true;
        if ((s.length() & 1) == 1) return false;
        Stack<Character> stack = new Stack<>();
        Map<Character,Character> map = new HashMap<>();
        map.put(')','(');
        map.put(']','[');
        map.put('}','{');
        for (int i = 0 ;i < s.length();i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '{'){
                stack.push(c);
            }else{
                if (stack.size() == 0 || map.get(c) != stack.pop()) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
        
    }
}

solution3 暴力解法,遍历数组,有对称消掉并继续,没对称结束

class Solution {
    // private static final Map<Character,Character> = new HashMap<>()
    public boolean isValid(String s) {
        if (s.length() == 0) return true; //空
        if ((s.length() & 1) == 1) return false; // 奇数、位运算
        int length;
        do{
            length = s.length();
            s = s.replace("()","").replace("[]","").replace("{}","");
        }while(length!=s.length());
        return s.length() == 0;   
    }
}

solution4 字符串加递归

class Solution {
    public boolean isValid(String s) {
        if (s.contains("()") || s.contains("[]") || s.contains("{}")) {
            return isValid(s.replace("()","").replace("[]","").replace("{}",""));
        }else {
            return "".equals(s);
        }
    }
}

原文地址:https://www.cnblogs.com/gg12138/p/12988485.html