import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ public String decodeCowName (String s) { // 用于存储数字 Stack<String> stack1 = new Stack<>(); // 用于存储字母 Stack<String> stack2 = new Stack<>(); char[] array = s.toCharArray(); for (char c : array) { // 如果是数字直接push入栈 if (c >= '0' && c <= '9') { stack1.push(c + ""); // 如果是左括号也是直接入栈 } 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
如果你觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~