编码规则为k[encoded_string],表示其中⽅括号内部的encoded_string正好重复k次。 注意:k保证为正整数

    你可以认为输⼊字符串总是有效的,输⼊字符串中没有额外的空格, 且输⼊的⽅括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,不会出现像3a或2[4]的输⼊

    示例:

    s = “3[a]2[bc]”
    返回 “aaabcbc”

    s = “3[a2[c]]”
    返回 “accaccacc”

    s = “2[abc]3[cd]ef”
    返回 “abcabccdcdcdef”

    s = “a3[b]2[c1[d1[e]]f]10[g]x2[y]z”
    返回 “abbbcdefcdefggggggggggxyyz”

    1. func decodeString(_ s: String) -> String {
    2. var Str = String()
    3. var num = 0
    4. var stack_num = [Int]()
    5. var stack_c = [String]()
    6. for c in s {
    7. if c.isNumber { //如果是数字,要对 num 进行操作
    8. num = num*10 + Int(String(c))!
    9. } else if c == "[" { //达到左边框,此时说明当前左边框的 ·遍历次数· 已经获取完毕,可以入栈
    10. stack_num.append(num)
    11. stack_c.append(Str) //如果左边有不需要重复的字母,所以也是需要入栈的
    12. // 重复次数已经保存,临时变量可以置空
    13. num = 0
    14. // 置空,用于记录括号内的数据
    15. Str = String()
    16. } else if c == "]" { //遇到右边框,此时是最复杂的,注意,由于我们是入栈操作,所以stack_num栈顶元素对应的一定是,现在 ”[]“里面需要重复的元素信息
    17. var tempStr = "" ///创建新的字符串,用于存储重复的字符
    18. let cur_num = stack_num.removeLast()
    19. for _ in 0..<cur_num {
    20. tempStr.append(Str) // 当我们遇到`[`的时候,Str=nil;所以此时遇到`]`,Str为`[]`内的内容
    21. }
    22. Str = stack_c.removeLast() + tempStr
    23. } else { //纯字母情况
    24. Str.append(c)
    25. }
    26. }
    27. return Str
    28. }