394. Decode String
Description:
The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.
You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc.
Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there won’t be input like 3a or 2[4].
Difficulty:Medium
Example:
s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".
方法: Recursive
- Time complexity :
O
(
n
)
O\left ( n \right )
O(n)
?
- Space complexity :
O
(
n
)
O\left ( n \right )
O(n)
思路:
很容易想到用递归的方法,但是实现起来需要一定的技巧,需要定位pos所指的位置,用&参数来保持pos的真实位置
class Solution {
public:
string decodeString(string s) {
int pos = 0;
return helper(s, pos);
}
string helper(string s, int& pos) {
string temp = "";
int num = 0;
for (; pos < s.size(); pos++) {
char cur = s[pos];
if (cur == '[') {
string cur_str = helper(s, ++pos);
while (num > 0) {
temp += cur_str;
num--;
}
}
else if (cur >= '0' && cur <= '9')
num = num * 10 + cur - '0';
else if (cur == ']')
return temp;
else
temp += cur;
}
return temp;
}
};