• LeetCode有效的括号Swift


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

    有效字符串需满足:

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

    示例 1:

    输入: "()"
    输出: true


    示例 2:

    输入: "()[]{}"
    输出: true


    示例 3:

    输入: "(]"
    输出: false


    示例 4:

    输入: "([)]"
    输出: false


    示例 5:

    输入: "{[]}"
    输出: true

    思路:

    利用栈结构先进后出的原理

    1.将数据源用dic存储, key为左括号 value为右括号

    2.创建一个记录左括号的栈数组flag

    3.遍历字符串

    如果当前字符满足在dic的keys中,证明是左括号,

    将元素入栈,压入数组flag中

    如果不存在 ,证明是右括号,

    如果当前字符等于栈顶元素,将栈顶元素出栈,移除数组中的最后一个元素,进入下一个循环

    如果当前字符不等于栈顶元素 也就是说,无法闭合之前的括号,则字符串不成立 return false

    最后只需要判断栈数组flag是不是为空即可,也就是说字符串是不是全部完整闭合

    class Solution {
        func isValid(_ s: String) -> Bool {
            let dic : [Character: Character] = ["{":"}", "[":"]", "(":")"]
            var flag: [Character] = []
            for char in s {
                if dic.keys.contains(char) {
                    //遇到左括号,将与之匹配的右括号入栈
                    flag.append(dic[char]!)
                } else {
                    //遇到右括号
                    if flag.last == char {
                        //遇到的右括号与栈顶字母相同,就出栈
                        flag.removeLast()
                    } else {
                        return false
                    }
                }
            }
            //栈为空正好匹配,或者s为空字符串
            return flag.count == 0
        }
    }
  • 相关阅读:
    Git
    Qcon2016上海站PPT
    TeamCity
    在cmd界面,怎么样退出Node.js运行环境
    python 2.x与python3.x的区别
    d3.max()与d3.min()
    d3.svg.line() 曲线构造器
    d3.js 之SVG:矢量化图形绘制
    moment.js 时间格式化库
    directive
  • 原文地址:https://www.cnblogs.com/huangzs/p/13731244.html
Copyright © 2020-2023  润新知