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
如果你觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~

京公网安备 11010502036488号