题目:
![](https://i-blog.csdnimg.cn/blog_migrate/401e3c15aba4dad1e5dade9075e7cfdb.png)
代码(首刷看解析 day14):
class Solution {
public:
string decodeString(string s) {
string res ="";
stack<int> nums;
stack<string> strs;
int num=0;
int len=s.size();
for(int i=0;i<len;++i){
if(s[i]<='9'&&s[i]>='0'){
num= num * 10 + s[i]-'0';
}else if((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z')){
res+=s[i];
}else if(s[i]=='['){
nums.push(num);
num=0;
strs.push(res);
res="";
}else{
int times=nums.top();
nums.pop();
for(int j=0;j<times;++j){
strs.top()+=res;
}
res=strs.top();
strs.pop();
}
}
return res;
}
};
代码(二刷看解析 2024年3月9日)
class Solution {
public:
string decodeString(string s) {
stack<pair<int, string>> st;
int num = 0;
string res = "";
for (int i = 0; i < s.size(); ++i) {
if (s[i] >= '0' && s[i] <= '9') {
num *= 10;
num += (s[i] - '0');
} else if (s[i] == '[') {
st.push(make_pair(num, res));
num = 0;
res = "";
} else if (s[i] == ']') {
int tempNum = st.top().first;
string str = st.top().second;
st.pop();
for (int i = 0; i < tempNum; ++i) str = str + res;
res = str;
} else {
res += s[i];
}
}
return res;
}
};