LeetCode394 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
示例:
s = "3[a]2[bc]", 返回 "aaabcbc".
s = "3[a2[c]]", 返回 "accaccacc".
s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".
/*
解题思路:采用迭代+两个栈。
用两个stack,一个用来保存个数,一个用来保存字符串,我们遍历输入字符串,如果遇到数字,我们更新计数变量cnt;如果遇到左中括号,我们把当前cnt压入数字栈中,把当前t压入字符串栈中;如果遇到右中括号时,我们取出数字栈中顶元素,存入变量k,然后给字符串栈顶元素循环加上k个t字符串,然后取出栈顶元素存入字符串t中;如果遇到字母,我们直接加入字符串t中即可。
s = "3[a2[c]]", 返回 "accaccacc".
*/ class Solution {
public:
string decodeString(string s) {
string t=""; //保存当前字符串,假设初始为空
int cnt=0; //假设初始为0
stack<int>sNum; //数字栈,保存重复次数
stack<string>sStr; //字符串栈,保存字符串
for(int i=0;i<s.size();++i){
if(s[i]>='0'&&s[i]<='9'){ //遇到数字
cnt=10 * cnt + s[i]-'0'; //想想这里为什么要+ 10 * cnt 可能重复次数大于等于10
}
else if(s[i]=='['){ //遇到左括号
sNum.push(cnt);
sStr.push(t);
cnt=0;
t.clear(); //想想为什么这里要清空
}
else if(s[i]==']'){ //遇到右括号
int k=sNum.top();
sNum.pop();
for(int j=0;j<k;++j){
sStr.top() += t;
}
t=sStr.top();
sStr.pop();
}
else{ //遇到字母
t += s[i];
}
}
return sStr.empty()?t:sStr.top();
}
};
LeetCode394 字符串解码的更多相关文章
- [Swift]LeetCode394. 字符串解码 | Decode String
Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_string], where ...
- 字符串解码DecodeString
字符串解码 原创博客,转载请注明出处!eg:ss=2[abc]3[cd]ef return:abcabccdcdcdefss=3[a2[c]]2[a] return:accaccaccaas ...
- [PHP]对Json字符串解码返回NULL的一般解决方案
---------------------------------------------------------------------------------------------------- ...
- unicode字符串解码显示
# encoding: utf-8 ''' unicode字符串解码显示 ''' import sys reload(sys) sys.setdefaultencoding('utf-8') a = ...
- LeetCode 394. 字符串解码(Decode String) 44
394. 字符串解码 394. Decode String 题目描述 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 enco ...
- Java实现 LeetCode 394 字符串解码
394. 字符串解码 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k ...
- [Leetcode]394.字符串解码
题目与解释 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正 ...
- Q394 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. 你可 ...
- 394 Decode String 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串.编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数.你可以认 ...
随机推荐
- 哪些地方会出现css阻塞,哪些地方会出现js阻塞?
js的阻塞特性: 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等. 直到JS下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容. 为了提高用户体验,新一代浏 ...
- 某宝的微信小程序源码合集
这是我在某宝买的小程序源码合集.能用的我用不到.. 我用的到的有的有没后端.仅供个人参考,严禁侵权或商业用途! 下载地址:https://pan.baidu.com/s/1cQEQ17LdN-7hxD ...
- 我是如何用go-zero 实现一个中台系统的
最近发现golang社区里出了一个新星的微服务框架,来自好未来,光看这个名字,就很有奔头,之前,也只是玩过go-micro,其实真正的还没有在项目中运用过,只是觉得 微服务,grpc 这些很高大尚,还 ...
- Flink Checkpoint 参数详解
Flink Checkpoint 参数详解 什么是 checkpoint 保存状态 Checkpoint 参数详解 StreamExecutionEnvironment env = StreamExe ...
- kali docker简单使用-vulhub搭建fastjson漏洞环境
准备环境 安装kali和docker参考: https://www.cnblogs.com/lijingrong/p/13396884.html sudo service docker start / ...
- P4735 最大异或和 01 Trie
题目描述 给定一个非负整数序列 \(\{a\}\),初始长度为\(n\). 有 \(m\) 个操作,有以下两种操作类型: \(A\ x\):添加操作,表示在序列末尾添加一个数 \(x\),序列的长度 ...
- 类818tu.c微信小说分销系统设计之定时模板消息源码
近期将出个系列讲解开发过程,同时作为此系统的开发记录吧,万能的博客园,本边讲解如何发送模板消息,并且能够定时发送,下一篇讲解如何处理多个公众号的网页授权登录问题 [后台]http://xiaoshuo ...
- 【译】JWT(JSON Web Token) 入门指南
JWT 入门指南 原文地址:https://blog.angular-university.io/angular-jwt/ 这篇文章是两篇手把手教你如何在Angular应用(也适用于企业级应用)中实现 ...
- 诡异的NPE--三目运算自动类型转换
今天在项目中碰到一个诡异的空指针异常的问题,刚开始很不解,明明自己做了空判断,为什么还是出现了空指针呢? 最后排查出来的原因是:三目运算符的自动类型匹配机制. 现场 java.lang.NullPoi ...
- 如何优雅的将Object转换成List
Main主函数中的 Object obj模拟了List对象.后续的代码首先判断obj是否是List类型,然后使用Class.cast做类型转换. 如果你想使用更方便的方法,可以直接调用下面的函数. p ...