题解 | #牛牛的字符串解码问题#
牛牛的字符串解码问题
https://www.nowcoder.com/practice/e5658311e6d44b74872e843ba13ee290?tpId=363&tqId=10618586&ru=/exam/oj&qru=/ta/super-company23Year/question-ranking&sourceUrl=%2Fexam%2Foj
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
如果你觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~
