问题
原题链接:https://leetcode.cn/problems/decode-string
解法
这是一个很经典的栈问题,只要理解了我们用栈存储pair<重复次数,起始位置>,通过pair我们既可以知道要重复的次数,也可以定位到该从哪儿开始重复,因此这就是该算法的主要解决思路。不同情况我们考虑做好对应处理,是字母就存上。是数字就让计数增加即可。是“[”表示前面的就是单独的一段,此刻存入stack。是“]”表示前面是一段的结束,此时该取出栈顶的pair重复存相应字符段一定的次数。
class Solution { public: string decodeString(string s) { stack<pair<int,int>> stk; string ans; int count=0; for(auto& item:s){ if(isdigit(item)){ count=count*10+(item-'0'); }else if(isalpha(item)){ ans+=item; }else if(item=='['){ stk.push({count,ans.size()}); count=0; }else if(item==']'){ int n=stk.top().first; string s=ans.substr(stk.top().second,ans.size()-stk.top().second); for(int i=0;i<n-1;i++){ ans+=s; } stk.pop(); } } return ans; } };
|