题意:将字符串展开,数字表示重复的次数,方括号中表示重复的内容。
思路:DFS,因为可能有嵌套,所以将方括号中的内容进行搜索。
class Solution {
public:
string decodeString(string s) {
return dfs(s);
}
string dfs(string s) {
if(s.length() == 0) return s;
string re;
string num;
for(int i = 0; i < s.length(); ++ i) {
if(s[i] >= '0' && s[i] <= '9') {
num += s[i];
continue;
}
if(s[i] == '[') {
int mark = 1;
string subs;
while( ++ i < s.length()) {
if(s[i] == ']' && mark == 1) {
break;
}
if(s[i] == '[') {
mark ++;
}
if(s[i] == ']') {
mark --;
}
subs += s[i];
}
string tempre = dfs(subs); //cout << tempre << " " << subs << endl;
//cout << num << endl;
int count = std::stoi(num); num =""; //cout << count << endl;
for(int j = 0; j < count; ++ j)
re += tempre;
continue;
}
re += s[i];
}
return re;
}
};