美文网首页
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