题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
**例如: **
输入: "()"
输出: true
输入: "()[]{}"
输出: true
输入: "(]"
输出: false
输入: "([)]"
输出: false
栈方法
使用「栈」这一数据结构来解决。
1.首先有效括号一定是相同类型左右闭合, 即偶数, 所以奇数先排除
2.for循环判断, 左括号依次入栈
3.由于括号需要相同类型闭合, 所以依次判断右括号是否栈顶依次配对, 配对出栈, 不匹配弹出返回false
4.循环结束判断栈中元素是否为0
func isValid(_ s: String) -> Bool {
if s.count % 2 != 0 {
return false
}
var temp: [Character] = []
for i in s {
switch i {
case "(", "[", "{":
temp.append(i)
case ")":
if temp.last != "(" {
return false
}
temp.removeLast()
case "]":
if temp.last != "[" {
return false
}
temp.removeLast()
case "}":
if temp.last != "{" {
return false
}
temp.removeLast()
default:
break
}
}
if temp.count != 0 {
return false
}
return true
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址