当前位置: 首页 > news >正文

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

LeetCode 394. 字符串解码

题目描述

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

思路

思路:参考的题解字符串解码(辅助栈法 / 递归法,清晰图解)
在这个题解中的变量包括res临时存储字符串,multi临时存储数值,stack_multi作为辅助栈存储数值,stack_res作为辅助栈存储字符串,在这个算法中,规则为:

  1. 假如遇到了数字,更新multi=10*multi+Integer.parse(c+””);
  2. 假如遇到了字符,更新res=res.append(c)
  3. 假如遇到了[,将multires中的内容入栈:multi.push(multi), res.push(res)并做清空multi=0, res=new StringBuilder()
  4. 假如遇到了],将stack_multistack_res中的内容出栈,得到目前的结果写入res中。实际上就是res=last_res+last_multi*res,即有:
    I. Integer m = stack_multi.pop(); String r = stack_res.pop()
    II. 根据值m和当前res中的内容,利用for循环组成字符串for(int i=0;i<m;i++) tmp.append(res)
    III. res=r+tmp

代码

class Solution {public String decodeString(String s) {StringBuilder res = new StringBuilder();int multi = 0;// 两个辅助栈,一个存数字,一个存字符串Deque<Integer> stack_multi = new ArrayDeque<>();Deque<String> stack_res = new ArrayDeque<>();for (char c : s.toCharArray()) {if (c == '['){ // 如果等于左括号,将res和multi入栈中stack_multi.push(multi);stack_res.push(res.toString());multi = 0;res = new StringBuilder();} else if (c == ']') { // 如果等于右括号,当前结果=last_res+last_multi*resInteger last_multi = stack_multi.pop();String last_res = stack_res.pop();StringBuilder tmp = new StringBuilder();for (int i = 0; i < last_multi; i++) tmp.append(res);res = new StringBuilder(last_res + tmp);}else if (c >= '0' && c <= '9') multi = multi * 10 + Integer.parseInt(c + "");else res.append(c);}return res.toString();}
}

相关文章:

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

LeetCode 394. 字符串解码 题目描述 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字…...

最新整理:Selenium自动化测试面试题

1.selenium中如何判断元素是否存在? find_elements查找到的元素个数为0&#xff0c;find_element报错意味着元素不存在 2.如何判断元素是否出现? 判断元素是否出现&#xff0c;存在两种情况&#xff0c;一种是该元素压根就没有&#xff0c;自然不会出现;另外一种是有这样的…...

外包干了2年,快要废了。。。

先说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了2年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会让一…...

乐尚代驾十订单支付seata、rabbitmq异步消息、redisson延迟队列

账单信息 司机结束代驾之后&#xff0c;生成账单&#xff08;包含账单信息和分账信息&#xff09;司机发送账单给乘客乘客获取账单之后&#xff0c;进行支付 获取账单信息 order_bill表记录的账单信息&#xff0c;我们直接获取即可 Operation(summary "根据订单id获取…...

HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,静态路由,环回,缺省,空接口,NAT

学习目标&#xff1a; 链路聚合VLAN间通讯Super VLANMSTPVRRPip配置,静态路由,环回&#xff0c;缺省&#xff0c;空接口NAT 学习内容&#xff1a; 实验拓扑实验需求实验需求分析实验配置内容 &#xff08;每一个设备的每一步操作&#xff09;实验结果验证 1.实验拓扑 搭建 …...

Apple提出MM1.5:多模态大型语言模型微调的方法、分析和见解_mm1.5 模型下载

摘要 我们介绍了 MM1.5&#xff0c;一个新的多模态大型语言模型 (MLLM) 家族&#xff0c;旨在增强在富文本图像理解、视觉参照和定位以及多图像推理方面的能力。 在 MM1 架构的基础上&#xff0c;MM1.5 采用以数据为中心的模型训练方法&#xff0c;系统地探索了整个模型训练生…...

【毫米波雷达(三)】汽车控制器启动流程——BootLoader

汽车控制器启动流程——BootLoader 一、什么是Bootloader(BT)&#xff1f;二、FBL、PBL、SBL、ESS的区别三、MCU的 A/B分区的实现 一、什么是Bootloader(BT)&#xff1f; BT就是一段程序&#xff0c;一段引导程序。它包含了启动代码、中断、主程序等。 雷达启动需要由BT跳转到…...

AI 搜索来势汹汹,互联网将被颠覆还是进化?

最近&#xff0c;美国新闻集团起诉了知名 AI 搜索引擎 Perplexity AI。也许你会想&#xff0c;这不就是又一起“AI 惹官司”吗&#xff1f;其实&#xff0c;这次情况不太一样&#xff0c;甚至可能会改变我们未来上网的方式&#xff01; 争议的焦点是什么&#xff1f;是未来的 …...

《二分查找算法:在有序数组中搜索目标值》

目录 一、问题分析 二、二分查找算法原理 三、代码实现 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target&#xff0c;我们要写一个函数来搜索 nums 中的 target&#xff0c;如果目标值存在就返回它的下标&#xff0c;否则返回 -1。 …...

【万字总结】数据结构常考应用大题做法画法详解_树_哈希表_图_排序大总结

文章目录 1.树相关应用大题1.1 已知二叉树的中序序列和前序or中序&#xff0c;画出二叉树1.2 二叉树的遍历、树的遍历、森林的遍历总结1.3二叉树与森林之间的转换1.3.1 已知树的先序序列和中序序列&#xff0c;画出森林 1.4 二叉树的线索化1.5 二叉排序树1.5.1 二叉排序树的删除…...

Docker + Jenkins + gitee 实现CICD环境搭建

目录 前言 关于Jenkins 安装Jenkins docker中运行Jenkins注意事项 通过容器中的Jenkins&#xff0c;把服务打包到docker进行部署 启动Jenkins 创建第一个任务 前言 CI/CD&#xff08;持续集成和持续交付/持续部署&#xff09;&#xff0c;它可以实现自动化的构建、测试和部署…...

rabbitMq怎么保证消息不丢失?消费者没有接收到消息怎么处理

在使用RabbitMQ时&#xff0c;保证消息不丢失以及处理消费者未接收到消息的情况可以通过以下几个方法&#xff1a; 1. 确保消息的持久化 队列持久化&#xff1a;在声明队列时将其设置为持久化&#xff08;durabletrue&#xff09;&#xff0c;这样RabbitMQ在重启后也会保留队…...

商务数据分析在提升客户体验方面的作用体现在哪些环节

在当今竞争激烈的商业环境中&#xff0c;客户体验已成为企业成功的关键因素。商务数据分析犹如一把神奇的钥匙&#xff0c;在提升客户体验的征程中发挥着至关重要的作用&#xff0c;贯穿于多个环节。 一、客户需求分析&#xff1a;洞察客户内心的窗口 客户需求分析是商务数据…...

cooladmin使用整理

1、后端关键字自动生成没有代码段提示&#xff0c;原因是拉取的项目代码中没有.vscode文件夹&#xff0c;复制一套至项目src同级即可 2、前端快速创建&#xff0c;在Entity完成后就去快速创建中选数据结构&#xff0c;这时没有对应的内容&#xff0c;数据结构是和controller层a…...

CentOS 7 更换软件仓库

CentOS 7 于2024年6月30日停止维护&#xff0c;官方仓库已经没有软件了&#xff0c;想要继续使用 &#xff0c;需要更换软件仓库&#xff0c;这里更换到阿里云的软件仓库 https://developer.aliyun.com/mirror/ 查看目前可用的软件数量 yum repolist 更换软件仓库&#xff1a…...

现代Web开发:React Hooks深入解析

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 现代Web开发&#xff1a;React Hooks深入解析 现代Web开发&#xff1a;React Hooks深入解析 现代Web开发&#xff1a;React Hook…...

HarmonyOS使用arkTS拉起指定第三方应用程序

HarmonyOS使用arkTS拉起指定第三方应用程序 前言代码及说明bundleName获取abilityName获取 前言 本篇只说采用startAbility方式拉起第三方应用&#xff0c;需要用到两个必备的参数bundleName&#xff0c;abilityName&#xff0c;本篇就介绍如何获取参数… 代码及说明 bundle…...

flex安装学习笔记

https://zhuanlan.zhihu.com/p/2783726096 3.下载 Flux 模型 FLUX.1 [dev] &#xff1a;官方版本满配版&#xff0c;最低显存要求 24G&#xff1b;FLUX.1 [dev] fp8&#xff1a;大佬优化 [dev] 后版本&#xff0c;建议选择此版本&#xff0c;最低 12G 显存可跑&#xff1b;FLU…...

09-结构化搜索、搜索的相关性算分

term 查询执行精确值匹配&#xff0c;要求文档中的字段值与指定的词项完全相等。对于日期字段等精确值字段&#xff0c;通常使用 term 查询可以快速有效地匹配文档。match 查询执行全文搜索&#xff0c;会对输入的文本进行分析&#xff0c;生成查询词项&#xff0c;并试图找到与…...

手机屏幕上进行OCR识别方案

在手机屏幕上进行OCR识别&#xff0c;可以通过一些主流方案实现高效、准确的文本识别。以下是几种常见方案&#xff1a; 1. 使用 Tesseract OCR 原理&#xff1a;Tesseract 是一个开源的 OCR 引擎&#xff0c;支持多种语言。可以通过一些优化提升其对手机屏幕文本的识别效果。…...

遗传算法与深度学习实战(22)——使用Numpy构建神经网络

遗传算法与深度学习实战&#xff08;22&#xff09;——使用Numpy构建神经网络 0. 前言1. 神经网络基础1.1 简单神经网络的架构1.2 神经网络的训练 2. 使用 Numpy 构建神经网络2.1 网络架构2.2 实现神经网络 小结系列链接 0. 前言 我们已经学习了如何使用进化算法来优化深度学…...

react->Antd->Table调整checkbox默认样式

checkbox默认不展示&#xff0c;hover此行时&#xff0c;出现checkbox,选中后不消失&#xff1a; hover前&#xff0c;设置透明边框&#xff1b; hover时&#xff0c;checkbox出现 选中后 代码块&#xff1a; .ant-checkbox {.ant-checkbox-inner {border: transparent;}}.ant…...

一种ESB的设计

系统架构 ESB包括&#xff1a; ESB总控服务、业务应用集群、业务消息WEB服务、业务消息日志服务、运维管理平台、业务设计器。如下图所示 ESB总控服务 ESB总控服务承载了各项业务的运维和管理。主要包括&#xff1a; 业务流程的管理ESB内部不同模块间的通讯ESB系统设置和管理…...

上位机常用通信方式

1. 串口通信&#xff1a;RS232&#xff08;设备和PC之间&#xff0c;最常用&#xff0c;短距离&#xff09;、RS485&#xff08;工业现场总线&#xff0c;长距离&#xff0c;多点通信&#xff09; 2. 以太网通信&#xff1a;TCP/IP协议 3. CAN总线通信 4. Modbus协议&#xff1…...

Vue3中使用LogicFlow实现简单流程图

实现结果 实现功能&#xff1a; 拖拽创建节点自定义节点/边自定义快捷键人员选择弹窗右侧动态配置组件配置项获取/回显必填项验证 自定义节点与拖拽创建节点 拖拽节点面板node-panel.vue <template><div class"node-panel"><divv-for"(item, k…...

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…...

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …...

知识竞赛答题系统,线上答题小程序链接怎么做?

随着智能手机的普及&#xff0c;越来越多的单位开始在线上开展知识竞赛。这种形式的知识竞赛不仅易于操作&#xff0c;而且参与度更高。那么线上知识竞赛答题系统怎么做呢&#xff1f;自己可以做吗&#xff1f;答案是可以的&#xff01;借助微信答题系统制作平台风传吧&#xf…...

基于SSM的社区物业管理系统+LW参考示例

1.项目介绍 系统角色&#xff1a;管理员、业主&#xff08;普通用户&#xff09;功能模块&#xff1a;管理员&#xff08;用户管理、二手置换管理、报修管理、缴费管理、公告管理&#xff09;、普通用户&#xff08;登录注册、二手置换、生活缴费、信息采集、报事报修&#xf…...

android——jetpack startup初始化框架

一、jetpack startup Android Jetpack Startup是一个库&#xff0c;它简化了Android应用启动过程&#xff0c;尤其是对于那些需要处理复杂数据绑定和初始化逻辑的应用。它的核心在于提供了一个StartupComponent&#xff0c;用于声明应用的初始化逻辑&#xff0c;这个逻辑会在首…...