题目
题目链接
分析
用两个栈存储数字、字符串的情况
如果遇到[,就入栈,遇到]就按照数字把字符串出栈,并构造出新的字符串赋给res。
一步步内部解码。
代码
class Solution {
public:
string decodeString(string s) {
stack<int> st_int;
stack<string> st_ss;
int num=0;
string res="";
for(int i=0;i<s.length();i++){
if(s[i]>='0'&&s[i]<='9'){
num=num*10+int(s[i]-'0');//计算数字
}
else if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'){//存储连续的字母
res=res+s[i];
}
else if(s[i]=='['){//遇到左括号,记录数字和字母
st_int.push(num);
num=0;
st_ss.push(res);
res="";
}
else if(s[i]==']'){//遇到右括号,弹出括号内的对应字符串和括号外的数字
int times=st_int.top();st_int.pop();//数字
string temp="";
if(!st_ss.empty()){
temp=st_ss.top();
st_ss.pop();//获得字符串
}
for(int j=0;j<times;j++){//与之前的字符串 构造新的字符串
temp+=res;
}
res=temp;
}
}
return res;
}
};