class Solution {
public:
bool isNum(char c) {
if (c >= '0' && c <= '9')
return true;
return false;
}
int getNum(string &s, int &k) {
int num = 0;
for (; k < s.size(); k++) {
char c = s[k];
if (isNum(c)) {
num = num * 10 + c - '0';
}else
break;
}
return num;
}
bool isChar(char c) {
if (c >= 'a' && c <= 'z')
return true;
return false;
}
string decodeString(string s) {
stack<int> stNum;
stack<string> stStr;
for (int i = 0; i < s.size();) {
if (isNum(s[i])) { // 数字直接入栈
int num = getNum(s, i);
stNum.push(num);
}else if (s[i] == '[') { // 肯定是字母
string tmp = "";
i++;
int k = i;
for (k; k < s.size(); k++) {
if (s[k] == ']' || isNum(s[k]) || s[k] == '[')
break;
tmp += s[k];
}
stStr.push(tmp);
i = k;
}else if (s[i] == ']') { // 右括号弹出运算
int num = stNum.top();
stNum.pop();
string tmp = stStr.top();
stStr.pop();
string res = "";
for (int k = 0; k < num; k++)
res += tmp;
tmp = "";
if (!stStr.empty()){
tmp = stStr.top();
stStr.pop();
}
stStr.push(tmp + res);
i++;
}else { // 纯字母, 和栈顶元素进行拼接
int k = i;
string tmp = "";
for (; k < s.size(); k++){
if (isChar(s[k]))
tmp += s[k];
else
break;
}
i = k;
if(!stStr.empty()) {
tmp = stStr.top() + tmp;
stStr.pop();
}
stStr.push(tmp);
}
}
return stStr.top();
}
};
leetcode 394 解压字符串 栈
最新推荐文章于 2025-06-14 11:40:45 发布
本文解析了一段关于字符串解码的C++代码,涉及数字识别、字符判断、栈操作及复杂逻辑。通过实例展示了如何将输入的字符串中嵌套的数字和字母组合成新的字符串。

74

被折叠的 条评论
为什么被折叠?



