手机网站建设可信赖营销策略ppt模板
目录
- 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;// 两个栈Deque<Integer> stack_multi = new ArrayDeque<>();Deque<String> stack_str = new ArrayDeque<>();for(Character c: s.toCharArray()){//  0-9if( c>='0' && c<='9'){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();// 数字倍数Deque<Integer> stack_multi = new ArrayDeque<>();Deque<String> stack_res = new ArrayDeque<>();// 遍历字符串 strfor(Character c : str.toCharArray()){// 如果是数字 更新倍数if( c>='0' && 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));}
}
 
