思路:使用dfs递归,将字符串分解成字母序列+数字*[字母序列]的形式进行递归求解。括弧里边的都需要放入递归里。具体请看代码
string decodeString(string s)
{
int index=0;
return dfs(s, index);
}
string dfs(string& s, int& index)
{
string res;
while (index < s.size() && s[index] != ']')
{
//若开始的时候是字母,先将字母加入res中
if (s[index] >= 'a' && s[index] <= 'z' || s[index] >= 'A' && s[index] <= 'Z')
{
res += s[index];
index++;
}
else if (isdigit(s[index]))//若是数字
{
int k = index;
while (isdigit(s[k]))
k++;
int num = stoi(s.substr(index, k - index));//stoi string转换成int类型
index = k + 1;//去掉左括号
string val = dfs(s, index);//进一步递归,确认括号里的字符串
index++;
while (num > 0)
{
res += val;
num--;
}
}
}
return res;
}