【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)

LeetCode 热题 394:字符串解码(多种方法详解)


题目描述

394. 字符串解码

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

编码规则为:k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。你可以认为 k 总是一个正整数。

输入字符串中可能存在嵌套的 k[encoded_string] 表达式。

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

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

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


解题思路

这个题本质是对嵌套结构的解析,有两种经典的解法:

  • 解法一:使用两个栈 —— 适合迭代模拟解析过程,结构清晰。
  • 解法二:使用递归 DFS —— 利用函数递归处理嵌套,结构简洁,代码优雅。

✅ 解法一:栈模拟解码过程

思路:

  1. 初始化两个栈:
    • 数字栈:记录每次遇到 [ 前的重复次数 k
    • 字符串栈:记录每层解码前的字符串
  2. 遍历字符串:
    • 遇到数字:累积多位数字
    • 遇到 [:将当前数字和字符串压栈,重置
    • 遇到 ]:弹出数字和字符串,拼接重复结果
    • 遇到字符:追加到当前字符串

Go 实现:

func decodeString(s string) string {
   
    numStack := []int{
   }
    strStack := []string{
   }
    currStr := ""
    num := 0

    for _, ch := 

你可能感兴趣的:(力扣LeetCode,leetcode,golang,算法)