题目描述:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM3IDM3EDO0AjNlJWY4AjNzYzX4UTN1ATMxAzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
思路:首先想到使用栈来存放数据,一个数字栈,一个字符栈。
1.当遇到数字的时候就统计数字(注意数字可能会超过一位数)
2.当遇到字符的时候就记录下来
class Solution {
public:
string decodeString(string s) {
int num=0;//用于统计数字结果
for(char c:s){
if(isdigit(c))
num=num*10+(c-'0');
else if(isalpha(c)){
res+=c;
}else if(c=='['){
chars.push(res);
nums.push(num);
res="";
num=0;
}else{
string temp=res;//已经重复一次了
for(int i=0;i<nums.top()-1;i++)//在这里少重复一次
res+=temp;
res=chars.top()+res;
chars.pop();
nums.pop();
}
}
return res;
}
private:
stack<string> chars;
stack<int> nums;
string res;
};