参考题目如下:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目:
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: 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"
class Solution {
public://最后结果出现的顺序一定是每个字母和[]内出现的次序相一致,无非是括号内部的数据出现了几次而已。所以从头来,如果没有数字和括号//直接将结果进行保存。如果有的话,那么就先加入一个括号的内容,在添加n-1个就可以了。string decodeString(string s) {string ans;stack<pair<int,int>> stk;//[] 内数字的数量int count=0;for(auto x:s){//如果是数字的话,就计算数字的数量。if(isdigit(x)){//32[abc] 要保证多位数字也同时可以满足相应的要求。count=count*10+(x-'0');}else if(x=='['){//如果是左括号就是先记录里面的数字的数量,和当前答案的大小。stk.push({count,ans.size()});//将对应0 归于0.count=0;}else if(isalpha(x)){ans+=x;}else{int times=stk.top().first;string temp=ans.substr(stk.top().second,ans.size()-stk.top().second);for(int i=0;i<times-1;i++){ans+=temp;}stk.pop();}}return ans;}
};