龙岗网站优化,360排名优化工具,做网站需要美工吗,化工网站建设目录 1- 思路栈实现四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接#xff1a;394. 字符串解码 1- 思路
栈实现四种情况处理
① 遇到数字#xff0c;进行倍数相加 、②遇到左括号#xff0c;压栈之前的元素、③遇到右括号弹出#xff0c;栈进行… 目录 1- 思路栈实现四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接394. 字符串解码 1- 思路
栈实现四种情况处理
① 遇到数字进行倍数相加 、②遇到左括号压栈之前的元素、③遇到右括号弹出栈进行拼接、④否则遇到字母直接拼接在 res通过栈实现先进后出的思想
对于输入 3[a2[c]] 的输入在读到 3[得到第一个括号 [ 之后才会进行入栈操作也就是将之前的 3 入栈到一个 multi的栈中 定义一个 multi 变量用于存储倍数也就是当前字符串扩大的倍数。 定义 res变量用于存储临时结果如果读到的是字符一直更新 res
读取过程
读取数字一开始如果读取的都是数字 multi则对 multi*10 c - 0; 的方式读取字符如果读取字符暂存到 res 中是否压栈取决于遇到的括号遇到 [ 括号如果遇到了左括号则将 [ 前状态的 数字 multi 和字符 res 进行压栈之后重新更新 multi 和 res遇到 ] 括号如果遇到了右括号则需要弹栈进行处理 2- 实现
⭐394. 字符串解码——题解思路 class Solution {public String decodeString(String s) {StringBuilder res new StringBuilder();int multi 0;// 两个栈DequeInteger stack_multi new ArrayDeque();DequeString stack_str new ArrayDeque();for(Character c: s.toCharArray()){// 0-9if( c0 c9){multi multi*10 c-0;}else if(c [){stack_multi.push(multi);stack_str.push(res.toString());multi 0;res new StringBuilder();}else if(c ]){StringBuilder tmp new StringBuilder();int curMulti stack_multi.pop();for(int i 0 ; i curMulti;i){tmp.append(res);}res new StringBuilder(stack_str.pop()).append(tmp);}else{res.append(c);}}return res.toString();}
}3- ACM 实现
public class strDecode {public static String strDecode(String str){// 1. 数据结构int multi 0;StringBuffer res new StringBuffer();// 数字倍数DequeInteger stack_multi new ArrayDeque();DequeString stack_res new ArrayDeque();// 遍历字符串 strfor(Character c : str.toCharArray()){// 如果是数字 更新倍数if( c0 c 9){multi multi *10 c - 0;}else if( c [){// 压栈stack_multi.push(multi);stack_res.push(res.toString());// 重置multi 0;res new StringBuffer();}else if(c]){// 出栈计算int nowMulti stack_multi.pop();StringBuffer tmp new StringBuffer();for(int i 0 ; i nowMulti;i){tmp tmp.append(res);}res new StringBuffer(stack_res.pop()).append(tmp);}else{res.append(c);}}return res.toString();}public static void main(String[] args) {Scanner sc new Scanner(System.in);String input sc.nextLine();System.out.println(结果是strDecode(input));}
}