题目大意:将字符串按规则解码,k[str]的编码规则为k个str相连,例如3[ab2[c]2[a]],解码后为abccaaabccaaabccaa
分析:栈。这道题重点在于需要识别嵌套的[],所以需要用栈。遍历字符串,维护当前的k和str:
当前字符为数字时,更新k=k*10 + 当前字符值;
当前字符为字母时,更新str=str + 当前字符;
当前字符为'['时,将<k,str>入栈,并且k和str归零,因为后续遍历要重新维护k和str;
当前字符为']'时,弹出栈顶元素<k,last_str>并进行拼接,str = last_str + k * str。
代码:
class Solution {
public:
string decodeString(string s) {
stack<pair<int,string>> st;
int num = 0;
string str = "";
for(int i = 0;i < s.size();i++){
if(s[i] >= '0' && s[i] <= '9') num = num * 10 + (s[i] - '0');
else if(s[i] == '['){
st.push(make_pair(num,str));
num = 0,str = "";
}
else if(s[i] == ']'){
int n = st.top().first - 1;
string tmp = str;
while(n--) str += tmp;
str = st.top().second + str;
st.pop();
}
else str += s[i];
}
return str;
}
};