题目讲解
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();}
};