美文网首页
LeetCode - 20. 有效的括号 Swift & Jav

LeetCode - 20. 有效的括号 Swift & Jav

作者: huxq_coder | 来源:发表于2020-08-21 09:03 被阅读0次

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

    有效字符串需满足:

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

    示例 1:

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

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

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

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    算法
    Swift:

    /**
     栈
     利用 栈 左括号入栈,右括号对应栈顶左括号出栈,遍历完成后栈为空则true
     */
    func isValid(_ s: inout String) -> Bool {
        // 过滤数据,单数不成立
        guard s.count % 2 != 1 else {
            return false
        }
        var stack = [Character]()
        for char in s {
            // 左括号入栈
            if char == "(" || char == "[" || char == "{" {
                stack.append(char)
            } else if (char == ")" && stack.last == "(") || (char == "]" && stack.last == "[") || (char == "}" && stack.last == "{") {
                stack.popLast()
            }
        }
        return stack.isEmpty
    }
    
    
    func isValid(_ s: inout String) -> Bool {
        // 过滤数据,单数不成立
        guard s.count % 2 != 1 else {
            return false
        }
        // 括号元素
        let map = [")": "(", "]": "[", "}": "{"]
        var stack = [Character]()
        for char in s {
            // 左括号入栈
            if map.values.contains(char.description) {
                stack.append(char)
            // 右括号对应栈顶左括号,出栈
            } else if map[char.description] == stack.last?.description {
                stack.popLast()
            // 不是括号
            } else {
                return false
            }
        }
        return stack.isEmpty
    }
    

    Java

    public boolean isValid(final String s) {
            // 过滤数据
            if(s.length()%2 == 1) return false; 
            Stack<Character> stack = new Stack<Character>();
            for (Character character : s.toCharArray()) {
                // 左括号入栈
                if(character == '(' || character == '[' || character == '{'){
                    stack.push(character);
                // 右括号与栈顶元素匹配,出栈
                } else if(!stack.isEmpty() && ((character == ')' && stack.peek() == '(')
                 || (character == ']' && stack.peek() == '[') 
                 || (character == '}' && stack.peek() == '{'))){
                    stack.pop();
                } else {
                    return false;
                }
            }
            return stack.isEmpty();
        }
    
    public boolean isValid(final String s) {
            // 过滤数据
            if(s.length()%2 == 1) return false; 
            Map<Character, Character> map = new HashMap<Character, Character>();
            Stack<Character> stack = new Stack<>();
            map.put(')', '(');
            map.put(']', '[');
            map.put('}', '{');
            for (Character c : s.toCharArray()) {
                if (map.containsValue(c)) {
                    stack.push(c);
                } else if (stack.isEmpty()) {
                    return false;
                } else if (map.get(c) == stack.peek()) {
                    stack.pop();
                } else {
                    return false;
                }
            }
            return stack.isEmpty();
        }
    

    精选题解:https://leetcode-cn.com/problems/valid-parentheses/solution/zhu-bu-fen-xi-tu-jie-zhan-zhan-shi-zui-biao-zhun-d/

    GitHub:https://github.com/huxq-coder/LeetCode

    相关文章

      网友评论

          本文标题:LeetCode - 20. 有效的括号 Swift & Jav

          本文链接:https://www.haomeiwen.com/subject/vwnyjktx.html