题解 | #牛牛的字符串解码问题#

牛牛的字符串解码问题

https://www.nowcoder.com/practice/e5658311e6d44b74872e843ba13ee290

  1. 创建两个栈,一个用于保存数字(即重复次数countStack),另一个用于保存字符串(strStack)。
  2. 遍历给定的编码字符串s。如果遇到数字,解析整个数字(可能有多位),并将其推入countStack。如果遇到字母,将其加到当前解码字符串(curStr)上。如果遇到[,表示一个新的编码字符串开始,将当前解码字符串curStr和当前的重复次数推入各自的栈中,并重置curStr和count。如果遇到],表示当前编码字符串结束,从countStack中弹出重复次数,将curStr重复相应次数,并与从strStack弹出的字符串连接起来,更新curStr。
  3. 遍历完成后,curStr即为解码后的字符串。
func decodeString(s string) string {
    var countStack []int
    var strStack []string
    curNum := 0
    curStr := ""

    for _, char := range s {
        if unicode.IsDigit(char) {
            // 解析数字
            num, _ := strconv.Atoi(string(char))
            curNum = curNum*10 + num
        } else if char == '[' {
            // 遇到'[',将当前数字和字符串入栈,并重置
            countStack = append(countStack, curNum)
            strStack = append(strStack, curStr)
            curNum = 0
            curStr = ""
        } else if char == ']' {
            // 遇到']',出栈,并构造字符串
            repeatTimes := countStack[len(countStack)-1]
            countStack = countStack[:len(countStack)-1]

            prevStr := strStack[len(strStack)-1]
            strStack = strStack[:len(strStack)-1]

            curStr = prevStr + repeat(curStr, repeatTimes)
        } else {
            // 字母,直接加到当前字符串
            curStr += string(char)
        }
    }
    return curStr
}

// repeat函数用于重复字符串n次
func repeat(str string, n int) string {
    result := ""
    for i := 0; i < n; i++ {
        result += str
    }
    return result
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务