博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode][Algo] 394. Decode String
阅读量:5115 次
发布时间:2019-06-13

本文共 1405 字,大约阅读时间需要 4 分钟。

 

题目:

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.

s = "3[a]2[bc]", return "aaabcbc".s = "3[a2[c]]", return "accaccacc".s = "2[abc]3[cd]ef", return "abcabccdcdcdef".

 思路:

讲真,这道题知道用栈,但是没啥思路。。。就是属于毛也写不出来的那种题。。。看了别人的答案才有点儿feel。。。可怕。

1.  用两个栈,分别存储数字和中间字符串

2. 局部字符串变量res,用来存储拼接最后的结果

3. 遇到"["就是说要开始准备组合咯~~就要把之前的res,还有数字,都压栈保存起来。然后之前的数字啊,res都清空,为后面做准备。

4. 遇到"]"就是说,哎呀这个需要decode的东东已经over了,可以开始啦。

  res里面保存的是需要重复的串,因为之前已经push_back了,相当于再重复的次数就是nums-1次。

      重复完了以后,把保存在chars 栈里面的字符串弹出来,接上。把用过的字符串和数字都弹出来。

代码:

1 class Solution { 2 public: 3     string decodeString(string s) { 4         string res=""; 5         stack
chars; 6 stack
nums; 7 int num = 0; 8 for(char c:s){ 9 if(isdigit(c)){ 10 num = num * 10 + c-'0'; //calc nums11 }12 else if(isalpha(c)){13 res.push_back(c); //form string14 }15 else if(c == '['){16 nums.push(num);17 chars.push(res);18 num = 0;19 res = "";20 }21 else if(c == ']'){22 string temp = res; //already push back once23 for(int i = 0; i

 

转载于:https://www.cnblogs.com/hopping/p/8626189.html

你可能感兴趣的文章
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>