LeetCode-热题100:394. 字符串解码

题目描述

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

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

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

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a2[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”

提示:

  • 1 <= s.length <= 30
  • s 由小写英文字母、数字和方括号 ‘[]’ 组成
  • s 保证是一个 有效 的输入。
  • s中所有整数的取值范围为 [1, 300]

代码及注释

func decodeString(s string) string {// 用于存储解码后的字符串strStack := make([]string, 0)   // 用于存储重复次数numStack := make([]int, 0)    // 当前正在构建的字符串  res := ""    // 当前的重复次数                   num := 0                        for _, str := range s {if str >= '0' && str <= '9' {       // 如果是数字,更新重复次数num = num * 10 + int(str - '0')} else if str == '[' {              // 如果是'[',将当前的重复次数和字符串保存到栈中,并重置重复次数和当前字符串strStack = append(strStack, res)numStack = append(numStack, num)res = ""num = 0} else if str == ']' {              // 如果是']',从栈中取出保存的字符串和重复次数,进行字符串的重复构建tmp := strStack[len(strStack) - 1]nums := numStack[len(numStack) - 1]strStack = strStack[:len(strStack) - 1]  // 弹出栈顶元素numStack = numStack[:len(numStack) - 1]  // 弹出栈顶元素for i := 0; i < nums; i++ {               // 将当前的字符串重复nums次并拼接到tmp上tmp += res}res = tmp                                // 更新当前的字符串为构建完成的字符串} else {res += string(str)                       // 如果是普通字符,直接拼接到当前的字符串上}}return res
}

代码解释

使用两个栈,一个用于存储字符串,另一个用于存储重复次数。遍历输入字符串,根据字符类型进行相应的处理,最后得到解码后的字符串。

时间复杂度:O(n),其中 n 是字符串 s 的长度。这是因为算法只需遍历一次输入字符串。

空间复杂度:O(n),在最坏的情况下,两个栈都可能存储 n/2 个元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——lesson13排序之计数排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Java 中的单例模式

引言&#xff1a; 在 Java 编程中&#xff0c;单例模式是一种常见的设计模式&#xff0c;它保证一个类只能创建一个实例&#xff0c;并提供一个全局访问点。单例模式在很多场景下都非常有用&#xff0c;比如线程池、日志系统、数据库连接池等。本文将详细介绍 Java 中单例模式的…

操作教程|在MeterSphere中通过SSH登录服务器的两种方法

MeterSphere开源持续测试平台拥有非常强大的插件集成机制&#xff0c;用户可以通过插件实现平台能力的拓展&#xff0c;借助插件或脚本实现多种功能。在测试过程中&#xff0c;测试人员有时需要通过SSH协议登录至服务器&#xff0c;以获取某些配置文件和日志文件&#xff0c;或…

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎&#xff0c;中文互联网领域领先的问答社区和原创内容平台&#xff0c;2011 年 1 月正式上线&#xff0c;月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法&#xff0c;数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…

Python学习笔记 - Python 2.x 和 Python 3.x 之间的重要区别

接手了一个基于Python 2.x编写的程序,想要将它们统一到新的Python 3.x的环境下,有些东西会报错,所以查了查,并且记录一下。 Python 除法运算符 首先需要注意除法运算符,移植代码时,最好使用浮点值(如 7.0/5 或 7/5.0)来获得预期结果。 print(7 / 5 ) print(-7 / 5) …

在 Linux中解压,压缩命令详解

在 Linux中解压&#xff0c;压缩命令详解 在 Linux中解压&#xff0c;压缩命令详解 &#x1f427;&#x1f4bb;摘要引言正文内容解压命令详解1. 解压 .zip 文件unzip 命令 2. 解压 .tar.gz、.tar.bz2、.tar.xz 文件tar 命令 3. 解压其他格式的压缩文件gzip 命令bzip2 命令 压…

开源软件协议全解析:深入解读开源世界的“游戏规则”

在数字经济的浪潮下&#xff0c;开源软件已经成为软件行业的中流砥柱&#xff0c;为众多开发者提供了宝贵的资源和灵感。然而&#xff0c;开源软件并非“免费午餐”&#xff0c;背后隐藏着各种协议和法律约束。本文将深入剖析开源软件的各种协议&#xff0c;为开发者提供一份详…

探讨人类“爱看热闹”现象的心理机制及其社会意义

“爱看热闹”这一行为现象普遍存在于世界各地的人群之中&#xff0c;无论是街头巷尾的小事&#xff0c;还是社交媒体上的热点事件&#xff0c;总能吸引大量人群驻足围观或参与讨论。这种看似寻常的社会现象背后&#xff0c;实则蕴含着丰富的人类心理机制和社会学原理。本文旨在…

js Class的概念及其应用场景

含义&#xff1a;类是用来创建对象的模板。 了解类概念之前最好了解以下的知识&#xff1a; 懂点闭包构造函数原型 JS和其他语言不同&#xff0c;它是没有Class的&#xff0c;它本质就是JS的构造函数封装的语法糖。ES6提供一种更为清晰的方式来遵循面向对象的编程方式。 首先…

代码随想录 Day25 216.组合总和III 17.电话号码的字母组合

216.组合总和III class Solution { private:vector<vector<int>> result; // 存放结果集vector<int> path; // 符合条件的结果// targetSum&#xff1a;目标和&#xff0c;也就是题目中的n。// k&#xff1a;题目中要求k个数的集合。// sum&#xff1a;已经收…

哥本哈根Major后steam搬砖该何去何从?

都在问我哥本哈根major比赛过后市场会不会崩盘呢&#xff1f;说实话&#xff0c;我是不喜欢预测市场的&#xff0c;其实是没那个本事而已。若真有这个预测市场走势的本事&#xff0c;我还用坐在这里每天苦哈哈的搬砖吗&#xff1f;我直接干囤卡囤号的倒卖生意岂不早发财了&…

宝塔面板与1Panel的详细对比分析

在当今的服务器管理领域&#xff0c;宝塔面板和1Panel都是备受欢迎的管理工具。它们各自具有独特的特点和优势&#xff0c;同时也存在一些局限性。本文将从多个维度对比这两款产品&#xff0c;帮助用户根据自身需求做出更合适的选择。 宝塔面板 优点 易用性&#xff1a;宝塔…

九州金榜|孩子厌学应该怎么引导?

孩子厌学&#xff0c;这是许多家长都可能面临的问题。对于这个问题&#xff0c;我们首先要明白&#xff0c;厌学并非孩子的错&#xff0c;而是他们在成长过程中所遇到的一种困境。那么&#xff0c;作为家长&#xff0c;我们应该如何引导他们走出这个困境呢&#xff1f;下面九州…

深入浅出:探索Hadoop生态系统的核心组件与技术架构

目录 前言 HDFS Yarn Hive HBase Spark及Spark Streaming 书本与课程推荐 关于作者&#xff1a; 推荐理由&#xff1a; 作者直播推荐&#xff1a; 前言 进入大数据阶段就意味着 进入NoSQL阶段&#xff0c;更多的是面向OLAP场景&#xff0c;即数据仓库、BI应用等。 …

【博弈论——2探究纳什均衡】

1.纳什均衡 纳什均衡&#xff08;Nash Equilibrium&#xff09;&#xff0c;由美国数学家约翰纳什&#xff08;John Nash&#xff09;提出&#xff0c;是博弈论中的一个重要概念&#xff0c;用来描述在一个非合作博弈中&#xff0c;各个参与者在考虑了其他所有参与者策略的前提…

proteus+keil5仿真学习笔记(补充章 特殊功能寄存器上)

补充章 特殊功能寄存器上 目录 前言 一、布局 二、功能介绍 运算器 1.B寄存器 B Register 2.累加器ACC Accumulator Register 3.程序状态寄存器PSW Program State Word 中断系统 4.中断优先级控制寄存器IP Interrupt Priority Register 5.中断允许控制寄存器IE Interrupt Enabl…

分享 | 顶刊高质量论文插图配色(含RGB值及16进制HEX码)(第三期)

第三期顶刊绘图配色分享来啦&#xff01;这一期做的细心了一点&#xff0c;把双色配色、三色配色、四色配色、多色配色分开展示&#xff0c;大家用起来会更方便一点&#xff1a; 这次还是用之前写了一个多小时的提取论文图片颜色并得出RGB值和16进制码并标注在原图的代码&…

探索c++:string常用接口 迷雾

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 一、string类 这里我们对string类进行一个简单的总结&#xff1a; string是表示字符串的字…

矩阵间关系的建立

参考文献 2-D Compressive Sensing-Based Visually Secure Multilevel Image Encryption Scheme 加密整体流程如下: 我们关注左上角这一部分: 如何在两个图像之间构建关系,当然是借助第3个矩阵。 A. Establish Relationships Between Different Images 简单说明如下: …