这道题目的难点在于括号存在嵌套。比如样例2, 这个是可以用栈去解决的。这里主要介绍递归的解法:
递归的难点在于需要再解析字符串的同时,进行递归。
思路是遇到左括号就递归解析,遇到右括号就返回递归的结果。同时注意数字的处理。
class Solution {
public:
string decodeString(string s) {
int index = 0;
return helper(s,index);
}
string helper(string s, int& i){
string res;
int num = 0;
while(i<s.size()){
if(s[i]>='0'&&s[i]<='9'){
num = num*10+(s[i]-'0');
}
else if(s[i]=='['){
string str = helper(s, ++i);
for(int i=0;i<num;i++){
res+=str;
}
num = 0;
}else if(s[i]==']'){
return res;
}else{
res+=s[i];
}
i++;
}
return res;
}
};