考察点:栈的使用,解析字符串
思路:使用两个栈:一个数字栈,一个string栈;数字栈栈顶表示string栈栈顶string的重复次数。从头到尾遍历string,遇到数字要提取数字,并压入数字栈,遇到 ‘[’要压入string栈空的string,遇到字母要将string栈栈顶的string拼接这个字母然后压栈,遇到‘]’要将string栈和num栈出栈重新拼接新的string入栈。最后在循环外要将string栈出栈。
C++ 代码:
class Solution {
public:
string decodeString(string s) {
stack<int> num_sta;
stack<string> str_sta;
num_sta.push(1);
str_sta.push("");
int i=0;
while (i < s.size()) {
if (s[i] <= 'z' && s[i] >= 'a') {
string temp = str_sta.top() + s[i];
str_sta.pop();
str_sta.push(temp);
} else if (isdigit(s[i])) {
int j = i;
while (isdigit(s[i])) {
i++;
}
int num = stoi(s.substr(j,i-j));
num_sta.push(num);
i--;
} else if (s[i] == '[') {
str_sta.push("");
} else if (s[i] == ']') {
int num = num_sta.top();
num_sta.pop();
string temp = str_sta.top();
str_sta.pop();
string res;
for (int k=0; k<num; k++) {
res += temp;
}
string temp_2 = str_sta.top();
str_sta.pop();
str_sta.push(temp_2 + res);
}
i++;
}
return str_sta.top();
}
};