- 字符串解码
相信会有人疑惑为什么官方视频例子里,s = “3[a2[c]]” 存的是[[2, a]而不是[2,c]呢?请看下面解答:
看完此题很容易就联想到栈,因为涉及到优先级最能层的括号先计算,其实这道题类似于分配率。
第一步是如何设计栈,有一个是数字代表重复次数,一个字符串代表要重复的字符串,很容易联想到用两个栈来存,分别存数字和字符串,存储进入’[‘前的状态(这里存的数字代表[]运算完后内部的字符串需要重复的次数,字符代表进入’[‘前需要存的字符。
接下来是怎么存?首先先用一个int num存储当前遍历的数,string res存储当前遍历到的字符串,当遇到’[‘的时候代表我们要先计算’[‘后的内容,当前计算得部分需要先存起来,当遇到’]‘时,将当前的res重复num次与栈最上层的字符串拼接,也就是进入当前’[‘时的状态,直到遍历结束,每遇到一次’[‘一次入栈,一次’]'一次出栈正好对应。
c++
1 | class Solution { |