算法每日一刷

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

2019-06-09  本文已影响0人  entre_los_dos

来源:力扣(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
    }
上一篇下一篇

猜你喜欢

热点阅读