LeetCode394. Decode String字符串解码

2023-10-07 21:18

本文主要是介绍LeetCode394. Decode String字符串解码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

394. Decode String

题意:

Given an encoded string, return its decoded string.

The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.

You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc.

Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there won't be input like 3a or 2[4].

Example 1:

Input: s = "3[a]2[bc]"
Output: "aaabcbc"

Example 2:

Input: s = "3[a2[c]]"
Output: "accaccacc"

Example 3:

Input: s = "2[abc]3[cd]ef"
Output: "abcabccdcdcdef"

Example 4:

Input: s = "abc3[cd]xyz"
Output: "abccdcdcdxyz"

例子分析

char-》int是c-'0',注意是将谁单引号!!!!!!!!!图片中的char到int的转换是错误的。

 分析要点:

1.因为涉及到括号匹配问题,所以要用到栈(数字栈和字母栈),此时联想到四则运算中运用到栈(运算符栈和数字栈)。在此题中的数字栈就相当于四则运算中的运算符栈,因为都是根据栈中的内容的表示对对象进行某种操作。

2.题目中多次用到字符的拼接,这时候最好不要直接用str=str1+str2这种,因为底层涉及到字符串的复制,会产生多个字符串对象(str、str1、str2),所以最好是用StringBuilder。

3.因为用到StringBuilder,所以要用new分配内存,注意开头和结尾处String和StringBuider之间要进行转换。

复杂度

1.时间复杂度O(n)

2.空间复杂度O(n)

代码:

Python

class Solution:def decodeString(self, s: str) -> str:multi=0res=''multiStack=[]resStack=[]for c in s:if c.isdigit():multi=multi*10+int(c)elif c=='[':multiStack.append(multi)multi=0resStack.append(res)res=''elif c==']':cur_multi=multiStack.pop()pre_res=resStack.pop()res=pre_res+cur_multi*reselse:res=res+creturn res

 

Java

class Solution {public String decodeString(String s) {int multi=0;StringBuilder res=new StringBuilder();//存放结果//创建两个栈:数字栈和字母栈LinkedList<Integer> multiStack=new LinkedList<>();LinkedList<String> resStack=new LinkedList<>();for(char c:s.toCharArray()){if(c>='0'&&c<='9'){//当遇到的是数字multi=multi*10+(c-'0');//当数字是多位数;字符转换成数字:c-'0'}else if(c=='['){//当遇到的是左括号:数字栈和字母栈都入栈,并且将multi和res清一下multiStack.addLast(multi);multi=0;resStack.addLast(res.toString());res=new StringBuilder();   }else if(c==']'){//当遇到的是右括号,将数字栈和字母栈都出栈,构造pre_res=resStack+multiStack*res;并更新resint cur_multi=multiStack.removeLast();//栈:先进后出StringBuilder tmp=new StringBuilder();for(int i=0;i<cur_multi;++i){tmp.append(res);}res=new StringBuilder(resStack.removeLast()+tmp);}else{//当遇到的是字母res.append(c);  }}return res.toString();}
}

 

这篇关于LeetCode394. Decode String字符串解码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160497

相关文章

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引