LeetCode[394]字符串解码

news2024/10/6 22:22:22

难度:Medium

题目:

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

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

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

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

Related Topics

  • 递归
  • 字符串

重点!!!解题思路

第一步:

明确解题手段:从示例二可以看出中括号套中括号,这种就可以看出能使用递归来解决

第二步:

既然我们已经要使用递归来解决,那么递归的是什么?

递归的只能是中括号里的字符串,我们要判断字符串是否遍历结束,那么递归回来我们需要知道递归结束后的下标,并且需要知道递归回来的字符串是什么样子的。

这样问题就解决了。 

源码+讲解:

class Solution {
    public String decodeString(String s) {
        return decodeString(s,0)[0]; 
    }
    public String[] decodeString(String s,int i) {
        StringBuffer res = new StringBuffer();  //用来拼接字符串
        int num=0;  //初始化num值,这里指字符串中的数字
        while (i<s.length()) {
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {  //数字进来操作
                num = num * 10 + (s.charAt(i) - '0');
            } else if (s.charAt(i) == '[') {  //如果是左括号进入递归,递归回来的数据即是中括号里面结束的东西
                String[] temp=decodeString(s,i+1);
                i=Integer.parseInt(temp[0]);  //获得递归结束回来的i下标
                while (num>0){  //根据num判断递归回来的字符串需要重复几遍
                    res.append(temp[1]);
                    num--;
                }
            }else if (s.charAt(i)==']'){  //遍历到]意味着递归结束,返回下标和字符串
                return new String[]{String.valueOf(i), res.toString()};
            }else{
                res.append(s.charAt(i));  //不是数字也不是[]那么这个字符需要拼接
            }
            i++; //下标移动
        }
        return new String[]{res.toString()};  //最后返回全部拼接好的字符串
    }
}

运行结果:

系列持续更新中,喜欢练习算法的那就点个攒吧  

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

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

相关文章

【LeetCode热题100】打卡第34天:排序链表乘积最大的子数组

文章目录 【LeetCode热题100】打卡第34天&#xff1a;排序链表&乘积最大的子数组⛅前言 排序链表&#x1f512;题目&#x1f511;题解 乘积最大的子数组&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第34天&#xff1a;排序链表&乘积最大的子数组 ⛅前…

如何将文字转化为语音?三个方法帮你轻松实现!

如何将文字转化为语音&#xff1f;在工作或学习中&#xff0c;我们可能会遇到需要将文字转化为语音的情况&#xff0c;这可能会让一些人感到困惑&#xff0c;不知道如何实现这个转换。其实&#xff0c;只需要利用一些第三方工具&#xff0c;就可以轻松地将文字转化为语音。下面…

十四、flex弹性容器属性样式2

目录&#xff1a; 1.准备工作 2.属性解析&#xff1a; align-items 3.属性解析&#xff1a; align-content 4.弹性元素的属性 一、准备工作 我们在前面的基础上&#xff0c;修改代码&#xff0c;把ul的高度定下来&#xff0c;设置800px, li的高度不定。 然后&#xff0c;body里…

音频采样器 Native Instruments Kontakt7 forMac/Windows图文安装教程

Native Instruments Kontakt是一款功能强大、灵活易用的音乐采样软件&#xff0c;适用于各种音乐创作和制作需求。无论是专业音乐制作人还是初学者&#xff0c;都能通过它来实现创意的音乐作品。 Kontakt具有直观的用户界面&#xff0c;可通过拖放方式导入和管理采样库。它支持…

Vmware虚拟机网络配置回顾

如何配置Vmware里的虚拟机网络&#xff1f;这个东西不常用&#xff0c;都是自己练手用的。能用就行&#xff0c;千万不要花时间记&#xff0c;没意义。 很简单&#xff0c;照着敲 首先登陆自己的虚拟机 vim /etc/sysconfig/network-scripts/ifcfg-ens32 TYPE"Ethernet&q…

数据结构--并查集

数据结构–并查集 逻辑结构―—“集合” 所有元素的全集s 将各个元素划分为若干个互不相交的子集 用互不相交的树&#xff0c;表示多个“集合” “并查集”的存储结构 用一个数组S[ ]即可表示“集合”关系 ‘并查集”的基本操作 集合的两个基本操作―— “并” \color{red}“…

ios14~14.3越狱/root(Taurine牛磺酸1.1.6)

Taurine牛磺酸 一键完美越狱 windows安装时建议关闭本地安全中心&#xff08;若报毒的话&#xff0c;没有则忽略&#xff09; 1.安装windows端AltInstaller&#xff1a;安装成功后&#xff0c;电脑右下角控制中心有一个&#xff08;灰色的 小方块&#xff09; 2.安装手机端A…

layui入门

layui入门 一.ayui简介1.简单易用2.组件丰富3.高度定制化4.响应式布局5.轻量灵活 2.layui的入门基础操作3.登录实例4.注册实例 一.ayui简介 Layui&#xff08;流行音 “layui”&#xff0c;来自“领域的模块化”&#xff09;是一款前端UI框架&#xff0c;专注于提升 Web 开发效…

Jmeter接口关联(三)【使用正则表达式提取值】以及正则表达式提取器中模板的含义及用法

文章目录 前言一、Jmeter中使用正则表达式匹配 1、选择 RegExp Tester2、在线程组------》添加------》后置处理器-------里面添加一个“正则表达式提取器”二、关于正则表达式提取器里面字段的解释 参数说明三、进一步解释Jmeter正则表达式提取器中的模板 1、当模板设置为$0$ …

每个开发人员都应该知道的VS Code入门技巧

这里有一些每个开发人员都应该知道的关于Visual Studio Code (VS Code)的技巧: 1、自定义键盘快捷键:VS Code允许您根据自己的喜好自定义键盘快捷键。点击“文件”->“首选项”->“键盘快捷键”或使用快捷键Ctrl K和Ctrl S打开键盘快捷键编辑器。可以修改现有快捷方式或…

抖音seo源码打包分享

抖音seo源码搭建----分享给各位开发者 获取视频列表 $Video_model new App_Model_Douyin_MysqlVideoStorage(); $video_list $Video_model->getList($where,$this->index,$this->count,$sort); $temp_video_model new App_Model_Douyin_…

微信小程序input的placeholder脱离文档流

今天进行真机调试时input的提示词 placeholder脱离了文档流&#xff0c;但是奇怪的是input框没有脱离文档流 如下图所示&#xff1a; 微信开发工具正常&#xff1a; 真机&#xff1a;不正常 脱离文档流 解决方法&#xff1a; <view clas…

给一个体积水,用不同体积的容器去装

这个有两个方案&#xff1a; 1.每个都装得最满&#xff0c;减少瓶子容积损失 //xzlist 瓶子容积排序 tj水总体积 xzzc各个体积瓶子数 public static void Boxjs(int tj, List<Map<String,Object>> xzlist, List<Map<String,Object>> xzzc){boolean f…

Linux信号机制-2

转自&#xff1a;Linux信号处理_linux 信号处理函数_努力啃C语言的小李的博客-CSDN博客 什么是信号 信号本质上是在软件层次上对中断机制的一种模拟&#xff0c;其主要有以下几种来源&#xff1a; 程序错误&#xff1a;除零&#xff0c;非法内存访问等。 外部信号&#xff1a…

Sql 语句小课堂8:求特定字段平均值的问题

Sql 语句小课堂8&#xff1a;求特定字段平均值的问题 问题来源初始数据超标条件方案一&#xff1a;得出汇总结果方案二&#xff1a;在原有数据上附加其结果 小结 问题来源 最近老顾变得原来越咸鱼了&#xff0c;好久没去逛 CSDN 问答了&#xff0c;于是灵感枯竭&#xff0c;不…

postgresql(二):pgsql导出数据

pgsql导出数据 1、概述2、导出数据2.1、导出所有库2.2、导出指定库2.3、导出指定表 3、总结 1、概述 大家好&#xff0c;我是欧阳方超&#xff0c;可以关注我的公众号“欧阳方超”&#xff0c;后续内容将在公众号首发。 今天介绍一下使用pg数据库的命令导出数据的操作。 2、导…

今天给大家分享几款好用的时间管理APP

在现代社会&#xff0c;时间是我们最宝贵的资源之一。有效地管理时间可以提高我们的工作和学习效率&#xff0c;从而实现更好的生活和工作质量。随着技术的不断发展&#xff0c;越来越多的时间管理APP涌现出来。今天&#xff0c;我想向大家分享几款好用的时间管理APP&#xff0…

没有有效的提示词(Prompt),要 Stable Diffusion 何用?

再好的prompt&#xff0c;不如有个简单的prompt工具。 本文推荐一个日本人写的prompt插件&#xff0c;我进行了汉化&#xff0c;并补充了3000多个提示词。只需要鼠标点点就可以了&#xff01;&#xff01;&#xff01; 引子&#xff1a; 今天去看了看Stable Diffusion插件版本…

MobPush Android常见问题

配置了默认点击跳转界面&#xff0c;对所有通道都有效吗 只对MobPush、魅族、小米、华为、OPPO、VIVO通道有效&#xff0c;对FCM通道无效。 如何获取回调参数 进程存活的情况下&#xff0c;可在我们的回调监听中看到通知详情&#xff0c;可以根据回调参数进行处理。 详情请查…

阿里云ECS云服务器的云盘使用

在我阿里云控制台上&#xff0c;可以看到有额外的磁盘&#xff08;2个实例&#xff0c;3个磁盘&#xff09; 找到对应云服务实例&#xff0c;看到了云盘信息 状态显示的挂接点是&#xff1a;/dev/xvdb 进入服务器却无法找到&#xff0c;也无法挂载 执行命令&#xff1a;fdisk …