LeetCode算法题-20. 有效的括号(Swift)
2019-06-09 本文已影响0人
entre_los_dos
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
左边符号对应右符号,且顺序应该是正确的:第一个右边的,应该对应前一个左边的。比如示例5正确,而示例4错误。
方法
func isValid(_ s: String) -> Bool {
//如果是单数,肯定是false
if s.count % 2 != 0 {
return false
}
let openArr = ["(","{","["]
let closeArr = [")","}","]"]
var resultArr = [Int]()
for character in s {
let openCharacterIndex = openArr.firstIndex(of: String(character))
if (openCharacterIndex != nil) {
//如果在开区间里面
resultArr.append(openCharacterIndex!)
}else {
//如果在闭区间,判断是不是与开区间最后一个对应。对应则删除
let closeCharacterIndex = closeArr.firstIndex(of: String(character))
if (resultArr.last == closeCharacterIndex) {
resultArr.removeLast()
}else {
return false
}
}
}
return resultArr.count == 0
}