美文网首页算法每日一刷
LeetCode算法题-20. 有效的括号(Swift)

LeetCode算法题-20. 有效的括号(Swift)

作者: entre_los_dos | 来源:发表于2019-06-09 18:49 被阅读0次

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses

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

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    注意空字符串可被认为是有效字符串。

    示例 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
        }
    

    相关文章

      网友评论

        本文标题:LeetCode算法题-20. 有效的括号(Swift)

        本文链接:https://www.haomeiwen.com/subject/pntgxctx.html