Swift 有效的括号 - LeetCode

2018-10-11 15:31:50 浏览数 (1)

LeetCode

题目: 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。

示例1:

代码语言:javascript复制
输入: "()"
输出: true

示例2:

代码语言:javascript复制
输入: "()[]{}"
输出: true

示例3:

代码语言:javascript复制
输入: "(]"
输出: false

示例4:

代码语言:javascript复制
输入: "([)]"
输出: false

示例5:

代码语言:javascript复制
输入: "{[]}"
输出: true
方案一:

1、循环字符串,将左括号压栈 2、如果是右括号,将其与栈顶字符串匹配 3、因为没有除了括号的其他字符,所以最终栈内为空

代码一:
代码语言:javascript复制
func isValid(_ s: String) -> Bool {
        var cArr = [Character]()
        for c in s {
            switch c {
            case "{","[","(":
                cArr.append(c)
            case "}":
                guard (!cArr.isEmpty && cArr.removeLast() == "{") else {
                    return false
                }
            case "]":
                guard (!cArr.isEmpty && cArr.removeLast() == "[") else {
                    return false
                }
            case ")":
                guard (!cArr.isEmpty && cArr.removeLast() == "(") else {
                    return false
                }
            default: break
            }
        }
        return cArr.isEmpty
    }
执行用时:20ms

开始的判断如下,上面优化只是减少了代码量

代码语言:javascript复制
//最开始判断 1
if let last = cArr.last {
    if last == "(" {
        cArr.removeLast()
    } else {
        return false
    }
} else {
    return false
}

//最开始判断 2
if let last = cArr.removeLast() {
    if last != "(" {
        return false
    }
} else {
    return false
}

当然也可以不使用Switch case 直接 if else

用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。

0 人点赞