题目描述
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 1.左括号必须用相同类型的右括号闭合
- 2.左括号必须以正确的顺序闭合
- 3.注意空字符串可被认为是有效字符串
示例1:
输入: "()"
输出: true
示例2:
输入: "()[]{}"
输出: true
示例3:
输入: "(]"
输出: false
示例4:
输入: "{[]}"
输出: true
方案一:使用栈
- 1、循环字符串,将左括号压栈
- 2、如果是右括号,将其与栈顶字符串匹配,若是匹配,匹配的最后一个元素出栈
- 3、因为没有除了括号的其他字符,所以最终栈内为空
// 如果是右括号,将其与栈顶字符串匹配
func isValid(_ s: String) -> Bool {
var cArr = [Character]()
for c in s {
switch c {
case "{","[","(":
cArr.append(c)
case "}":
if cArr.isEmpty == true || cArr.removeLast() != "{" {
return false
}
case "]":
if cArr.isEmpty == true || cArr.removeLast() != "[" {
return false
}
case ")":
if cArr.isEmpty == true || cArr.removeLast() != "(" {
return false
}
default: break
}
}
return cArr.isEmpty
}
注意cArr.removeLast() == cArr.last && cArrRemoveLast