import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ public String decodeString (String s) { // 用于存储数字 Stack<String> stack1=new Stack<>(); // 用于存储字母 Stack<String> stack2=new Stack<>(); char[] array = s.toCharArray(); for(char c:array){ // 如果是数字直接push入栈1 if(c>='0' && c<='9'){ stack1.push(c+""); // 如果是左括号或者字母也是直接入栈2 } else if(c=='[' || c>='a' && c<='z'){ stack2.push(c+""); // 右括号需要做逻辑操作 } else if(c==']'){ StringBuilder tmp1=new StringBuilder(); // 如果字母栈还有字母 while(!stack2.isEmpty()){ String x=stack2.pop(); // 如果没有遇到左括号,表明一组括号内字母还没输出完毕 if(!x.equals("[")){ // 直接加入到StringBuilder,单线程最快 保证字母顺序 tmp1.insert(0,x); } else { break; } } // 循环多少次每组字母 int count=Integer.parseInt(stack1.pop()); StringBuilder tmp2=new StringBuilder(); while(count>0){ tmp2.append(new String(tmp1)); count--; } stack2.push(new String(tmp2)); } } // 查询是否还有字母,都加入到结果集中 StringBuilder result=new StringBuilder(); while(!stack2.isEmpty()){ result.insert(0, stack2.pop()); } return result.toString(); } }
本题知识点分析:
1.栈的出栈和入栈
2.字符串StringBuilder使用
3.数学模拟
本题解题思路分析:
1.遇到数字入栈1
2.遇到左括号或者小写字母入栈2
3.为什么要左括号入栈二,自己想要逻辑就可以了,左括号和右括号要组成一个封闭区间
4.要考虑括号嵌套括号的情况,这个点很重要
5.其他就是用StringBuilder进行字符串拼接,注意字母顺序别搞错了就行,API函数的方法掌握清楚
本题使用编程语言: Java
如果你觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~