394. 字符串解码
解题思路
构造辅助栈stack 遍历字符串s的每一个字符c 当c为数字的时候 将数字转化为数字multi 当c是字母的时候直接在builder尾部添加c 当c是[ 将Multi 入stack1 builder转换为字符串 入stack2 然后全部初始化 将[之前的临时结果builder 入栈stack2 用来发现对应]之后的拼接操作 记录此前的Multi 发现]之后 获取multi * 字符串 当c是]之后 取出stack2栈顶元素 根据multi 计算重复字符串 最后再次取出栈顶元素字符串 拼接
class Solution {public String decodeString(String s) {
// 使用栈结构// 字节后端面试题目StringBuilder builder = new StringBuilder();int multi = 0;// 创建两个栈Stack<Integer> stack1 = new Stack<>();Stack<String> stack2 = new Stack<>();// 遍历字符串for(Character c:s.toCharArray()){if(c == '['){// 将前面的字符入栈// 数字字符进入stack1stack1.push(multi);// 字符串进入stack2stack2.push(builder.toString());// StringBuilder 转换为字符串// 之后清空multi 以及buildermulti = 0;builder = new StringBuilder();}else if(c == ']'){StringBuilder tmp = new StringBuilder();int temp = stack1.peek();// 取出栈顶元素 也就是最后一个进入栈的元素 也就是栈顶元素stack1.pop();// 将res 全部添加到tmpfor(int i = 0; i < temp; i++){tmp.append(builder);// 拼接这些字符串}// 同时将stack2的栈顶元素 拼接tmpbuilder = new StringBuilder(stack2.peek() + tmp);stack2.pop();}else if(c >= '0' && c <= '9'){multi = multi * 10 + Integer.parseInt(c + "");}else{builder.append(c);}}// res.append(c);return builder.toString();}
}