有效的括号

题目信息

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。   
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
    输入: "()"
    输出: true
示例 2:
    输入: "()[]{}"
    输出: true
示例 3:
    输入: "(]"
    输出: false
示例 4:
    输入: "([)]"
    输出: false
示例 5:
    输入: "{[]}"
    输出: true

解题思路

这道题目是判断是否是有效的括号,也就是说在这个规则下所有的括号能不能匹配到一块。
如果是括号的左边部分,直接加入到数组中,如果是括号的右边部分判断是否与数组的前一
个为一对。如果不是一对直接返回false,直至把该字符串遍历结束。判断数组是否为空

代码

func isValid(_ s: String) -> Bool {
    func isPair(_ a: Character, _ b: Character) -> Bool {
        return ((a == "[" && b == "]") || (a == "{" && b == "}") || (a == "(" && b == ")"));
    }
    enum Direction {
        case left
        case right
        static func getDirection(_ char: Character) -> Direction {
            switch char {
            case "(", "{", "[":
                return left;
            default:
                return right;
            }
        }
    }
    
    var unpaired: [Character] = []
    for char in s {
        let direction = Direction.getDirection(char)
        switch direction {
        case .left:
            unpaired.append(char)
        case .right:
            if !isPair(unpaired.last ?? " ", char) {
                return false
            } else {
                unpaired.removeLast(1)
            }
        }
    }
    return unpaired.isEmpty

}

 

题目链接

posted @ 2020-04-26 11:25  木子沉雨  阅读(243)  评论(0编辑  收藏  举报