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