zoukankan      html  css  js  c++  java
  • 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
        }
    }
  • 相关阅读:
    牛客小白月赛2 D 虚虚实实 【欧拉图】【连通图】
    牛客小白月赛2 A 数字方阵【随机】【找规律】
    牛客小白月赛1 J おみやげをまらいました 【MAP】
    牛客小白月赛1 I あなたの蛙が帰っています 【卡特兰数】
    欧拉函数
    乘法逆元
    扩展欧几里得
    快速乘法
    JPEG图像压缩出现资源不足问题的解决
    如何避免关键程序被意外关闭?
  • 原文地址:https://www.cnblogs.com/huangzs/p/13731244.html
Copyright © 2011-2022 走看看