字符串解码

news2024/11/26 12:47:36

题目链接

字符串解码

题目描述

注意点

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

解答思路

  • 利用栈先进后出的特点,将字符存储进栈中
  • 创建两个栈,一个数字栈,一个字符栈,当访问到数字时存储进数字栈中(注意整数取值范围为1~300),当访问到字母或’[‘时存储到字符栈中,当访问到’]‘时从数字栈中取出一个数字,再从字符栈中取出需要翻倍的字符(即遍历到’[‘为止),注意这些已经翻倍的字符可能也在另一个外层的’[]'中,后续可能再次翻倍,所以需要存储起来

代码

class Solution {
    public String decodeString(String s) {
        StringBuilder res = new StringBuilder();
        Deque<Character> charDeque = new LinkedList<>();
        Deque<Integer> digitDeque = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            // 数字
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                int times = s.charAt(i) - '0';
                while (i + 1 < s.length() && s.charAt(i + 1) >= '0' && s.charAt(i + 1) <= '9') {
                    times = times * 10 + (s.charAt(i + 1) - '0');
                    i++;
                }
                digitDeque.addLast(times);
                continue;
            }
            if ((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || s.charAt(i) == '[') {
                charDeque.addLast(c);
            }
            if (c == ']') {
                int times = digitDeque.removeLast();
                List<Character> list = new ArrayList<>();
                while (!charDeque.isEmpty() && charDeque.getLast() != '[') {
                    list.add(charDeque.removeLast());
                }
                charDeque.removeLast();
                for (int j = 0; j < times; j++) {
                    for (int k = list.size() - 1; k >= 0; k--) {
                        charDeque.addLast(list.get(k));
                    }
                }
            }
        }
        while (!charDeque.isEmpty()) {
            res.append(charDeque.removeLast());
        }
        return res.reverse().toString();
    }
}

关键点

  • 注意元素插入栈和出栈的顺序

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

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

相关文章

照片批量处理 7000张

需求&#xff1a; 有6700照片导入系统&#xff1b; 系统只支持500张/每次&#xff1b; 6700 按机构分类复制提取出来&#xff1b; 分批次导入&#xff1b; 6700 分17份复制到对应文件夹中&#xff1b; 照片按照学号命名的&#xff1b; 20231715401.jpg 开始用bat脚本…

Matlab Simulink支持system generator插件

文章目录 前言一、System Generator 简介二、System Generator 特性三、System Generator 安装1、确定是否已安装 System Generator 工具2、vivado 卸载3、vivado 安装 四、解决版本不兼容问题五、使用 System Generator 前言 目前有在 Simulink 中开发完成后将其转换成 Veril…

七天学会C语言-第一天(C语言基本语句)

一、固定格式 这个是C程序的基本框架&#xff0c;需要记住&#xff01;&#xff01;&#xff01; #include<stdio.h>int main(){return 0; }二、printf 语句 简单输出一句C程序&#xff1a; #include<stdio.h> int main(){printf("大家好&#xff0c;&quo…

浅析Java责任链模式实现

一、概要 定义&#xff1a;责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 二、应用场景&#xff1a; 1.多条件流程判断&#xff1a;权限相关…

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…

把握经济大势和个人财运密码必须读懂钱—现代金钱的魔力

原出处&#xff1a;天涯论坛之《把握经济大势和个人财运密码必须读懂钱—现代金钱的魔力》 原作者&#xff1a;真立派 原文完整版PDF&#xff08;可能很快就会被河蟹&#xff0c;建议先保存&#xff09;&#xff1a;https://pan.quark.cn/s/20c917683d8f 引子 过去一些年&…

数据结构入门 — 树的概念与结构

本文属于数据结构专栏文章&#xff0c;适合数据结构入门者学习&#xff0c;涵盖数据结构基础的知识和内容体系&#xff0c;文章在介绍数据结构时会配合上动图演示&#xff0c;方便初学者在学习数据结构时理解和学习&#xff0c;了解数据结构系列专栏点击下方链接。 博客主页&am…

【LeetCode-中等题】 151. 反转字符串中的单词

文章目录 题目方法一&#xff1a;双指针去除空格 题目 方法一&#xff1a;双指针去除空格 核心代码去除首尾以及中间多余空格(在原串上修改) //去除首尾以及中间多余空格(在原串上修改)public StringBuilder trimSpaces(String s) { int len s.length();StringBuilder str …

【结构型】代理模式(Proxy)

目录 代理模式(Proxy)适用场景代理模式实例代码&#xff08;Java&#xff09; 代理模式(Proxy) 为其他对象提供一种代理以控制对这个对象的访问。Proxy 模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候。 适用场景 远程代理 (Remote Proxy) 为一个对象在不同…

linux-线程条件变量(cond)

概述 与互斥锁不同&#xff0c;条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程&#xff0c;直到某特殊情况发生为止。通常条件变量和互斥锁同时使用 。 条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制&a…

Vue2的学习

computed计算属性 概念 基于现有数据&#xff0c;计算出来的新属性&#xff0c;依赖的数据变化&#xff0c;会自动重新计算 语法 声明在computed配置项中&#xff0c;一个计算属性对应一个函数这是一个属性{{计算属性名}}&#xff0c;不是方法注意不要忘记return <body…

无涯教程-JavaScript - ROW函数

描述 ROW函数返回引用的行号。 语法 ROW ([reference]) 争论 Argument描述Required/OptionalReference 您想要其行号的单元格或单元格范围。 如果省略引用,则假定它是出现ROW函数的单元格的引用。 请参阅下面的注释。 Optional Notes 如果引用是一个单元格范围,并且如果将…

【RTOS学习】单片机中的C语言

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 本喵默认各位小伙伴都会C语言&#xff0c;我们平时学习C语言都是在Windows环境下学习的&#xff0…

事半功倍,必看这4个Pandas神器

Pandas是我们日常处理表格数据最常用的包&#xff0c;但是对于数据分析来说&#xff0c;Pandas的DataFrame还不够直观&#xff0c;所以今天我们将介绍4个和Pandas相关的Python包&#xff0c;可以将Pandas的DataFrame转换交互式表格&#xff0c;让我们可以直接在上面进行数据分析…

【电子元件】常用电子元器件的识别之霍尔元件

目录 1. 霍尔元件的结构与特点1.1 霍尔元件的组成结构1.2 霍尔元件的霍尔效应 2. 霍尔元件的图形符号与型号2.1 1.图形符号2.2 2.型号说明 3. 半导体霍尔效应的原理3.1 半导体中的左手定则3.2 P型半导体霍尔效应的原理3.3 N型半导体霍尔效应的原理 4. 霍尔元件的电势计算与工作…

RabbitMQ深入 —— 交换机

前言 在这篇文章中&#xff0c;荔枝围绕交换机梳理RabbitMQ中交换机相关知识&#xff0c;主要包括&#xff1a;扇出交换机、直接交换机、主题交换机&#xff0c;根据不同的交换机引出相应的RabbitMQ模式。同样的本篇文章也是主要围绕如何通过交换机定向群体发送消息这一个问题来…

澳洲硕士申请QA

Q&A 申请一般问题 澳洲申请时间 澳洲分2月跟7月开学&#xff0c;不分rolling。随时申请&#xff0c;截止日期前申请就行&#xff0c;&#xff08;具体时间官网有写&#xff09; 研究生学位时长 它整体的要求一般就是如果说你要申请的这个专业是本专业&#xff0c;那他…

分类预测 | Matlab实现基于MIC-BP-Adaboost最大互信息系数数据特征选择算法结合Adaboost-BP神经网络的数据分类预测

分类预测 | Matlab实现基于MIC-BP-Adaboost最大互信息系数数据特征选择算法结合Adaboost-BP神经网络的数据分类预测 目录 分类预测 | Matlab实现基于MIC-BP-Adaboost最大互信息系数数据特征选择算法结合Adaboost-BP神经网络的数据分类预测效果一览基本介绍研究内容程序设计参考…

Linux内核中断机制

什么是中断&#xff1f; 中断是一种打断程序的正常执行流程的事件&#xff0c;这种事件以电信号的形式出现&#xff0c;可以由硬件设备或者CPU本身生成。 在中断发生后&#xff0c;正常的执行流被立即中止&#xff0c;转而执行中断处理程序(handler)。中断处理完成之后&#…

IT运维:使用数据分析平台监控Windows Eventlog

TIPS&#xff1a;本文鸿鹄版本&#xff1a;2.10.0及以上版本 概述 本文基于《IT运维&#xff1a;利用鸿鹄采集Windows event log数据》&#xff08;以下简称原文&#xff09;文章进行了细化与延伸。主要包括细化了安装步骤&#xff0c;增加了仪表板。 鸿鹄端配置 创建数据集与数…