龙岗网站优化,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));}
}