原题目:https://leetcode-cn.com/problems/decode-string/
思路:
采用栈的思想。分析题目可知会遇到以下几种情况。
1、如果是数字,把字符变成数字,存储至变量num(注意连续两个都是数字的情况)。
2、如果是字符,存储至变量ans;
3、如果s[i] 是[;那么把ans和num进栈,用于后续的操作。
num是下一次遇到 ] 的拼接次数;ans是拼接完之后的前缀。
4、如果s[i]是],那么pop栈中的元素进行拼接。
代码:
class Solution {
public:
string decodeString(string s) {
string ans = "";
int num=0;
stack<int> ns;
stack<string> ss;
for(int i=0;i<s.size();i++){
if(s[i]=='['){
ss.push(ans);
ns.push(num);
num=0;ans="";
}
else if(s[i]==']'){
string k = ss.top();
ss.pop();
int n = ns.top();ns.pop();
for(int j=0;j<n;j++){
k += ans;
}
ans = k;
}
else if(s[i]>='0'&&s[i]<='9'){
num = num*10+s[i]-'0';
}
else{
ans = ans + s[i];
}
}
return ans;
}
};