题目讲解
394. 字符串解码
算法讲解
这道题有四种情况:1.遍历的时候遇到数字,我们计算并保存数字,将它加入到数字栈中;2.遍历的时候遇到[,我们就把字符保存,加入到字符栈中;3.当遇到],我们及时按照数字栈的栈顶元素的数字,添加字符栈中栈顶元素的次数;4.如果当前遍历的时候上述情况什么都不是,说明是正常的字符串,直接在字符栈的栈顶中添加即可
class Solution {
public:
string decodeString(string s) {
stack<int> stack_num;
stack<string> stack_string;
stack_string.push("");
int i = 0;
while(i < s.size())
{
if(s[i] >= '0' && s[i] <= '9')
{
int temp_num = 0;
while(isdigit(s[i]))
{
temp_num = temp_num * 10 +(s[i] - '0');
i++;
}
stack_num.push(temp_num);
}
else if(s[i] == '[')
{
i++;
string temp_string;
while(s[i] >= 'a' && s[i] <= 'z')
{
temp_string += s[i];
i++;
}
stack_string.push(temp_string);
}
else if(s[i] == ']')
{
string temp_string = stack_string.top();
stack_string.pop();
int cnt = stack_num.top();
stack_num.pop();
while(cnt--)
{
stack_string.top() += temp_string;
}
i++;
}
//这个是字母前面没有数字的是 所以就是需要将它单独添加在栈里面
else
{
string temp_string;
while(i < s.size() && s[i] >= 'a' && s[i] <= 'z')
{
temp_string += s[i];
i++;
}
stack_string.top() += temp_string;
}
}
return stack_string.top();
}
};