美文网首页
394. 字符串解码--栈

394. 字符串解码--栈

作者: DevilRoshan | 来源:发表于2020-09-22 01:30 被阅读0次

给定一个经过编码的字符串,返回它解码后的字符串。

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

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"

示例 2:

输入:s = "3[a2[c]]"
输出:"accaccacc"

示例 3:

输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"

示例 4:

输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"

解题

type RemarkTempDecode struct {
    Num int
    Str string
}

func decodeString(s string) string {
    stack := make([]RemarkTempDecode, 0)
    num := 0
    str := ""

    for _, c := range s {
        if unicode.IsDigit(c) {
            c = c-'0'
            num = num * 10 + int(c)
        } else if c == '[' {
            rtd := RemarkTempDecode{
                Num: num,
                Str:   str,
            }
            stack = append(stack, rtd)
            str = ""
            num = 0
        } else if c == ']' {
            st := stack[len(stack)-1]
            stack = stack[:len(stack)-1]
            str = st.Str + strings.Repeat(str, st.Num)
        } else {
            str = str + string(c)
        }
    }
    return str
}

附:

rune和byte的区别

Go语言中byte和rune实质上就是uint8和int32类型。byte用来强调数据是raw data,而不是数字;而rune用来表示Unicode的code point。参考规范

uint8       the set of all unsigned  8-bit integers (0 to 255)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)

byte        alias for uint8
rune        alias for int32

0~9的数字都可以的整数都可以通过-'0'的方式获取:

func PrintDigit(s string) {
    for _, c := range s {
        fmt.Print(c - '0')
    }
    fmt.Println("")
    for i := 0; i < len(s); i++ {
        fmt.Print(s[i] - '0')
    }
}

func main() {
    PrintDigit("0123456789")
}

unicode包判断字母、数字、空白符号

包 unicode 包含了一些针对测试字符的非常有用的函数(其中 ch 代表字符)

  • 判断是否为字母: unicode.IsLetter(ch)
  • 判断是否为数字: unicode.IsDigit(ch)
  • 判断是否为空白符号: unicode.IsSpace(ch)

相关文章

  • 打卡-字符串解码

    394. 字符串解码

  • 394. 字符串解码

    394.字符串解码给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string...

  • 394. 字符串解码

    394. 字符串解码 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_stri...

  • 394. 字符串解码--栈

    给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内...

  • LeetCode 394. 字符串解码 | Python

    394. 字符串解码 题目来源:力扣(LeetCode)https://leetcode-cn.com/probl...

  • 394.字符串解码

    ​394.字符串解码 题目分析 对这个题目的需求进行分析(需求分析来自Leetcode用户名为凛冬[1])我只是稍...

  • 394. 字符串解码

    题目描述 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示...

  • 394.字符串解码

    执行用时 :1 ms, 在所有Java提交中击败了90.09%的用户 内存消耗 :37.4 MB, 在所有Java...

  • 394. 字符串解码

    给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号...

  • 394. 字符串解码

    题目链接:https://leetcode-cn.com/problems/decode-string/ 解题思路...

网友评论

      本文标题:394. 字符串解码--栈

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