LeetCode 394. 字符串解码

题目描述

394. 字符串解码

image-20230305172244576

思路分析

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func decodeString(s string) string {
	numStack := make([]int, 0)
	strStack := make([]string, 0)
	curStr, num := "", 0
	for i := 0; i < len(s); i++ {
		c := s[i]
		if c >= '0' && c <= '9' {
			num = num*10 + int(c-'0')
		} else if c == '[' {
			numStack = append(numStack, num)
			strStack = append(strStack, curStr)
			curStr, num = "", 0
		} else if c == ']' {
			count := numStack[len(numStack)-1]
			numStack = numStack[:len(numStack)-1]

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

			curStr = preStr + strings.Repeat(curStr, count)
		} else {
			curStr += string(c)
		}
	}
	return curStr
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
func decodeString(s string) string {
	var stack []string
	curNum := 0
	curStr := ""
	for _, cur := range s {
		if cur >= '0' && cur <= '9' {
			curNum = curNum*10 + int(cur-'0') // 构建数字
		} else if cur == '[' {
			// 将当前数字和字符串状态压入栈中
			stack = append(stack, curStr)
			stack = append(stack, strconv.Itoa(curNum))
			curStr = ""
			curNum = 0
		} else if cur == ']' {
			// 弹出栈顶的字符串和数字
			numStr := stack[len(stack)-1]
			stack = stack[:len(stack)-1]
			preStr := stack[len(stack)-1]
			stack = stack[:len(stack)-1]
			// 重复构建字符串
			repeatNum, _ := strconv.Atoi(numStr)
			for i := 0; i < repeatNum; i++ {
				preStr += curStr
			}
			curStr = preStr
		} else {
			// 处理普通字符
			curStr += string(cur)
		}
	}
	return curStr
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/48855635
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!