有效的括号
题目信息
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 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 }