题目:
Given an encoded string, return it'sdecoded string.
The encoding rule is: k[encoded_string],where the encoded_string inside the square brackets is being repeated exactly ktimes. Note that k is guaranteed to be a positive integer.
You may assume that the input string isalways valid; No extra white spaces, square brackets are well-formed, etc.
Furthermore, you may assume that theoriginal data does not contain any digits and that digits are only for thoserepeat numbers, k. For example, there won't be input like 3a or 2[4].
Examples:
s = "3[a]2[bc]", return"aaabcbc".
s = "3[a2[c]]", return"accaccacc".
s = "2[abc]3[cd]ef", return"abcabccdcdcdef".
我们用两个stack,一个用来保存个数,一个用来保存字符串,我们遍历输入字符串,如果遇到数字,我们更新计数变量,如果遇到左中括号,我们把当前的计数变量压致数字栈中,把当前字符压入字符串栈中;如果遇到右中括号时,我们取出数字栈中顶元素,存入变量,然后给字符串栈的顶元素循环加上字符串,然后取出顶元素存入字符串中;如果遇到字母,我们直接加入字符串中即可。
string decodeString(string s) {
stack<string> chars;
stack<int> nums;
string res;
int num = 0;
for(char c : s) {
if(isdigit(c)) {
num = num*10 + (c-'0');
}
else if(isalpha(c)) {
res.push_back(c);
}
else if(c == '[') {
chars.push(res);
nums.push(num);
res = "";
num = 0;
}
else if(c == ']') {
string tmp = res;
for(int i = 0; i <nums.top()-1; ++i) {
res += tmp;
}
res = chars.top() + res;
chars.pop(); nums.pop();
}
}
return res;
}