【重点】【栈+特例】394.字符串解码

手机刷双系统 刷机教程(https://www.geekeyes.cn/forum.php/forum.php?mod=viewthread&tid=492) 解锁教程(http://www.gioov.com/index.php/1386)   解锁教程 cmd下 进入adb目录( 如果环境变量配置了adb 可以直接在cmd 下输入命令) 手机连接电脑,确保usb 调试打开,然后手机连接电脑,... 阅读详情

题目

法1:基于栈

重点是记忆该题思路!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Python

class Solution:
    def decodeString(self, s: str) -> str:
        res, stack, multi = '', [], 0
        for c in s: # 遍历每一个字符
            # 1. 遇到 [ → 保存现场,入栈!
            if c == '[':
                stack.append([multi, res])  # 保存:[当前倍数,之前的字符串]
                multi = 0    # 重置倍数
                res = ''     # 重置当前字符串,准备存括号内内容
            # 2. 遇到 ] → 恢复现场,拼接结果!
            elif c == ']':
                curMulti, last_res = stack.pop() # 弹出保存的现场
                res = last_res + curMulti * res  # 关键:之前 + 倍数×当前
            # 3. 遇到数字 → 计算倍数(支持多位数:100 → 10*1+0=10 → 10*10+0=100)
            elif '0' <= c <= '9':
                multi = 10 * multi + int(c)
            # 4. 遇到字母 → 直接拼接到当前结果
            else:
                res += c

        return res

注意:关于python的一些语法知识
关键点分析:
(1)列表存储的是引用:
当执行stack.append([multi, res])时,列表[multi, res]会被添加到栈中。
列表中存储的是multi和res的当前值的引用(即指向这两个对象的指针)。
(2)不可变类型的特性:
multi是整数(不可变类型),res是字符串(同样不可变)。
不可变对象一旦创建,其值无法被修改,只能被重新赋值(即变量指向新的对象)。
(3)代码逻辑的安全性:
在遇到[时,multi和res的当前值被保存到栈中。
随后,multi被重置为0,res被重置为空字符串’'。
在遇到]时,从栈中弹出的是之前保存的原始值(因为整数和字符串不可变,原始值未被修改)。

Java

class Solution {
    public String decodeString(String s) {
        int multi = 0, i = 0;
        StringBuilder res = new StringBuilder();
        LinkedList<Integer> multiStack = new LinkedList<>();
        LinkedList<String> stringStack = new LinkedList<>();
        while (i < s.length()) {
            char c = s.charAt(i);
            if (c == '[') {
                multiStack.offerLast(multi);
                stringStack.offerLast(res.toString());
                multi = 0;
                res = new StringBuilder();
            } else if (c == ']') {
                StringBuilder tmpBuilder = new StringBuilder();
                int tmpMulti = multiStack.removeLast();
                for (int j = 0; j < tmpMulti; ++j) {
                    tmpBuilder.append(res);
                }
                res = new StringBuilder(stringStack.removeLast() + tmpBuilder.toString());
            } else if (c >= '0' && c <= '9') {
                multi = 10 * multi + c - '0';
            } else {
                res.append(c);
            }
            ++i;
        }

        return res.toString();
    }
}
基于英特尔 RealSense D455 相机实现裂缝尺寸以及深度测量 D455 相机可用于对这些零部件进行高精度的表面检测,快速准确地测量裂缝的尺寸和深度,实现自动化的质量控制和缺陷筛查,提高生产效率和产品质量。D455 相机能够对焊缝表面进行细致扫描,测量焊缝的宽度、深度以及焊缝表面的不规则程度等参数,帮助检测焊缝是否存在缺陷,如未焊透、焊瘤等,为焊接质量的评估和改进提供数据支持。:RGB 传感器采用全局快门,并且其视场与深度视场相匹配,能够提供更出色的 RGB 图像质量,以及深度图像和 RGB 图像之间的更好对应性,从而可提高扫描质量。可以看出宽度和高度都是十分准确的。 阅读详情

相关推荐

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

LeetCode 394:字符串解码的递归与栈解法详解

在计算机科学中,栈(Stack)是一种基础且重要的数据结构,遵循后进先出(LIFO)原则,常用于处理具有嵌套或回溯性质的问题。其核心原理是通过压栈和出栈操作来管理程序状态或数据顺序。递归则是函数调用自身的一种编程技巧,本质上是系统调用栈的隐式应用,适用于解决可分解为相似子问题的情况。这两种技术在处理嵌套结构解析时展现出极高的技术价值,例如在编译器构建、数据反序列化和模板渲染等场景中,它们能高效地处理括号匹配、状态保存和层级展开。字符串解码问题(LeetCode 394)正是栈与递归思想的经典实战:给定形如`

weixin_31528001的博客 281

告别密码明文传输:手把手带你用Python实现SRP-6协议(附完整代码)

本文详细介绍了如何使用Python实现SRP-6协议,确保密码安全传输和存储。通过零知识证明与密钥交换技术,SRP协议在不传输明文密码的情况下完成认证,适用于金融App等高安全需求场景。文章包含完整代码示例和实战技巧,帮助开发者规避常见安全陷阱。

weixin_30689307的博客 412

【算法入门】LeetCode 394:字符串解码 - 栈的应用(Java & JavaScript)|字符串解码问题:栈与递归的巧妙应用|解码括号内的重复模式

字符串解码问题是一个经典的字符串处理问题,通过使用栈来管理字符和重复次数,我们可以高效地解码字符串。希望本文能帮助你更好地理解这一问题及其解决方案,掌握栈的基本应用是解决许多类似问题的关键。本题可以使用栈来解决。栈是一种后进先出(LIFO)的数据结构,非常适合处理嵌套结构的问题。可以尝试解决类似的栈的应用问题,例如:LeetCode 20:有效的括号LeetCode 150:逆波兰表达式求值希望这篇博客能够帮助你理解字符串解码问题,并掌握解决 LeetCode 394 题的方法。祝你刷题愉快!

南北极之间 1648

银行数据仓库体系实践(3)--数据架构

狭义的数据仓库数据架构用来特指数据分布,广义的数据仓库数据架构还包括数据模型、数据标准和数据治理。即包含相对静态部分如元数据、业务对象数据模型、主数据、共享数据,也包含相对动态部分如数据流转、ETL、整合、访问应用和数据全生命周期管控治理。 数据架构层面通过数据分类、分层部署等手段,从非功能性视角将数据合理布局。通过整体架构管控和设计,支持业务操作类和管理分析类应用(系统),满足业...

acumen_leo的博客 7010

树莓派c语言串口通讯程序

在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一

realank的专栏 1万+

C++ 栈 模拟 力扣 394. 字符串解码 每日一题 题解

本文围绕力扣 394. 字符串解码问题展开,核心讲解栈 + 分层解析的解题思路。先阐述题目价值与面试考察方向,再通过双栈(数字栈、字符串栈)分情况处理数字、括号、字母,结合实例完整模拟嵌套解析过程,补充关键细节与优化技巧,给出 C++ 代码实现及复杂度分析。旨在帮助读者夯实栈的应用基础,掌握嵌套结构处理逻辑,实现解题思路迁移。

Q741_147的博客 1179

从零开始:用Python实现AlphaZero五子棋AI(附完整代码)

本文详细介绍了如何从零开始使用Python实现AlphaZero五子棋AI。通过工程化实践,逐步构建蒙特卡洛树搜索(MCTS)、轻量化残差网络(ResNet)以及自博弈训练循环,并提供完整可运行的代码。文章旨在帮助开发者绕过复杂理论,聚焦实战,最终打造一个能够自我学习与对弈的智能体,是深度强化学习在游戏AI领域的一次完整项目实战。

weixin_29081703的博客 415

lc 394字符串解码:递归 或 用栈模拟递归

方法时间复杂度空间复杂度适用场景递归O(n)O(m)代码简洁,适合嵌套层数较少的情况栈O(n)O(m)通用,适合所有情况不用递归O(n)O(m)通用,适合所有情况递归:代码简洁,但可能受递归深度限制。栈:显式使用栈,逻辑清晰,适合所有情况。不用递归:类似于栈方法,但用vector模拟栈,代码稍长但同样高效。推荐使用栈方法,因为它直观且高效。用户_uBiEPAi<s.size();i++) 我想让某条件成立时,i直接跳过i+1到i+2ChatGLM。

m0_68339197的博客 1002

基于Simulink的雷达跟踪系统仿真(附源码)

此示例包含对雷达系统的基本特征进行建模的子系统。该模型是用于目标位置和速度检测的雷达系统的典型模型。该示例包括雷达脉冲发生器、射频发射器子系统、移动目标的 Simulink 表示、射频接收器和接收模块(Rx 模块)。

珞瑜的博客 3513

OpenClaw 2026.3.13 踩坑实录:飞书HTTP协议降级Bug与多版本回归问题汇总

摘要:OpenClaw v2026.3.13存在多个严重回归问题,包括飞书API调用协议意外降级为HTTP导致连接失败(#46100)、本地Gateway诊断矛盾(#45504)及设备配对CLI命令失效等。该版本发布流程本身也存在异常,被迫以v2026.3.13-1标签重新发布。建议飞书用户回退至v2026.3.8稳定版,其他用户谨慎升级。本文详细记录了各Bug现象、影响范围及临时解决方案,并梳理了飞书通道的"多版本回归史",指出其根源在于架构变迁和测试覆盖不足。最后提供了包含配置备份、

Maynor的博客 869

LeetCode 394. 字符串解码

题目要求解码由k[encoded_string]格式组成的字符串,其中k为正整数,方括号可能嵌套。解题思路是使用栈进行括号匹配和数字处理:遇到]时弹出字符直到[,然后读取数字k,将括号内字符串重复k次后重新入栈。需要注意数字可能为多位数以及字符顺序反转问题。代码通过遍历字符串,非]字符直接入栈,遇到]时逆向处理字符和数字,最终栈中即为解码结果。该方法保证了嵌套括号的正确处理,时间复杂度为O(n),空间复杂度为O(n)。

软小行的博客 691

10.28华为OD机试真题 新系统 - 社交网络消息转发 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - 社交网络消息转发 (Java/Py/C/C++/Js/Go)

算法大师! 411

【每日算法】 LeetCode 394. 字符串解码

摘要 LeetCode 394题考察字符串解码问题,核心是处理嵌套编码结构。本文提供了两种解法:栈解法(最优)和递归解法。栈解法使用双栈分别存储数字和字符串,时间复杂度O(n),空间复杂度O(n),适合处理深度嵌套;递归解法利用调用栈自然处理嵌套,代码更简洁但可能栈溢出。文章分析了两种方法的复杂度、优缺点,并列举了前端开发中的实际应用场景,如模板引擎解析、CSS预处理、JSON/XML解析等。掌握该算法有助于提升处理嵌套数据结构的能力,对前端开发具有重要意义。

LYFlied的博客 999

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

394. 字符串解码

遇到字母直接拿,遇到数字找配对,拆解成 [重复内容] + [后缀]。我们将字符串看作是一个数学表达式。基本情况:如果是字母,直接保留,处理下一个字符。复杂情况:如果是数字,说明后面跟着一个k[...]的结构。我们需要找到这个结构匹配的右括号,将其拆解为三部分:次数k。内容t:括号里面的部分(需递归解码)。后缀:右括号后面的剩余部分(需递归解码)。

一同进步 729

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Leetcode 394. Decode String 字符串解码 解题报告

1 解题思想意思是在字符串当中,有一个特殊的格式 — k[S],遇到这种状况,需要把S重复k次,注意是可以嵌套的在这次解题当中,我是使用了栈的方式,去解决这个问题。分别使用了一个全局的已解码的字符串Builder,另外对于为解码的,使用栈来暂存。符号’[‘控制进栈,分别进入计数数字和之前尚未解码的字符串 符号’]’控制出站,出栈当前计数,并且将未解码的字符串进行重复,再链接上一个未解码的字符串注

MebiuW的专栏 6619

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode-394. 字符串解码 递归思路

输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。并没有随着内层的执行而向后移动。导致内层处理完了,外层又从老位置开始,或者根本不知道跳到哪里。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。,例如不会出现像 3a 或 2[4] 的输入。一开始看到题目的测试用例其实第一反应就是递归。不过我一开始做的时候有点碰壁 因为我将。中递归调用处理括号内部逻辑时,外层的。对下一层递归的返回值进行累加即可。,表示其中方括号内部的。

SoulruiA的博客 1277

leetcode394. 字符串解码!

传送门 题目:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为 1.输入字符串总是有效的; 2.输入字符串中没有额外的空格, 3.输入的方括号总是符合格式要求的。 4. [ ]内不包含数字, s = “3[a]2[bc]”, 返回 “aaabcbc”. s = “3[a2[c]]”, 返回 “accaccacc”. s = “2[abc]3[cd]ef”

lonelyVM的博客 357

394. 字符串解码(辅助栈+字符串栈)

题解 题意:字符串的编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 给定一个经过编码的字符串,返回它解码后的字符串 样例 s = “3[a]2[bc]”, 返回 “aaabcbc”. s = “3[a2[c]]”, 返回 “accaccacc”. s = “2[abc]3[cd]ef”, 返回 “abcabccdcdcdef”. 题解:无疑,越是嵌套在里面的括号,要被重复的次数就越多,一定是越里层括号

Einskai216的博客 277

(栈)394. 字符串解码

给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。测试用例保证输出的长度不会超过 105。示例 1:输入:s = “3[a]2[bc]”

учёба 521

LeetCode 394. 字符串解码(Decode String)

在实际开发中,我们经常需要解析字符串,比如处理模板语言(像 HTML、Markdown、或自定义语法)、实现配置文件解析、甚至在前后端数据传输中做字符串编码与解码。而这道 LeetCode 394《字符串解码》正是一个非常典型的“栈结构解析”题。 它不仅考察我们对字符串处理的熟悉程度,还能锻炼我们对嵌套结构的思维建模能力。很多开发者在刚接触时容易被多层嵌套搞晕,其实只要理解核心思想——用栈保存当前状态,一切就变得简单多了。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 482

LeetCode394.字符串解码

题解的做法一和我第一种的思想是一样的就是从stack中拿出来字符串后乘以倍数又返回栈,但是它的的效率超过了77%,它相比于我就是一点优化,它stack放的是String而我放的是char,所以它遍历到一个字母字符后就把后面连串的字符拼接放进去。比如“3[a2[c]]”,一开始stack里面放的是3[a2[c,然后遇到了],就把c拿出来,把2*c放回去,现在stack里面是3[acc,然后又遇到了],把acc拿出来,把3*acc放回去,stack里面现在是accaccacc,遍历完了返回accaccacc。

qq_61009660的博客 797

LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解

摘要:本文介绍了一种使用栈结构解码嵌套编码字符串的算法。编码格式为k[encoded_string],表示括号内字符串重复k次。算法通过栈处理嵌套结构,遵循"后进先出"原则:遇到非右括号字符直接入栈;遇到右括号时,依次弹出字符构建子串,获取重复次数,解码后重新入栈。该方法能正确处理嵌套表达式(如"3[a2[c]]"→"accaccacc")和并列结构(如"3[a]2[bc]"→"aaabcbc")。文中详细说

weixin_51228134的博客 270

力扣394题字符串解码:栈与递归双解法详解与实战技巧

在计算机科学中,栈和递归是处理嵌套结构问题的两大核心思想。栈作为一种后进先出的数据结构,常用于模拟函数调用、管理程序状态,其原理在于通过压栈和弹栈操作保存和恢复上下文。递归则是函数直接或间接调用自身,利用系统调用栈隐式地保存状态,其技术价值在于能以简洁的代码表达复杂的嵌套逻辑。这两种思想在编译器设计、表达式求值、文件路径解析等场景中应用广泛。本文聚焦于力扣394题“字符串解码”,该题要求解析形如`k[encoded_string]`的嵌套编码字符串,正是栈与递归思想的典型应用。通过深入剖析栈方法中**数字累

weixin_30843121的博客 225

leetcode394字符串解码记录

题目地址(394. 字符串解码) https://leetcode-cn.com/problems/decode-string/ 题目描述 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如

xjw的博客 288

(LeetCode-Hot100)394. 字符串解码

LeetCode 394题要求解码形如k[encoded_string]的字符串。解题方法包括:1)栈模拟法,使用数字栈和字符串栈处理嵌套结构;2)递归法,遇到'['进入递归,']'返回结果;3)双栈优化版本。核心思路是解析数字作为重复次数,处理括号内的字符串重复拼接。代码提供了Java和Go两种实现,分别使用栈和递归方式解决。时间复杂度O(n),空间复杂度O(n)。

小飞的博客 997
上一篇: 【重点】【二分查找】4.寻找两个正序数组的中位数
下一篇: 【重点】【单调栈】84.柱状图中最大矩形
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值