关注
解决第一题的方法其实和leetcode上394. Decode String很像,如果用迭代思想的话需要两个 stack 来辅助运算,一个用来保存个数,一个用来保存字符串。 我们遍历输入字符串,如果遇到数字,更新计数变量num。如果遇到'[',把当前字符串t压入字符串栈中,并将t清零。如果遇到'|',我们把当前num压入数字栈中,并把num清零。如果遇到']',我们取出数字栈中顶元素,存入变量n,然后给字符串栈的顶元素循环加上n个当前t字符串,然后更新t的值。如果遇到字母,我们直接加入当前字符串t中即可。一定要注意是把当前的字符串t重复数字栈顶的次数后加到字符串栈顶的字符后面(有点儿绕🤣)代码如下: import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
StringBuilder t = new StringBuilder("");
int num = 0;
Deque<Integer> stackNum = new ArrayDeque<>();
Deque<StringBuilder> stackStr = new ArrayDeque<>();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c >= '0' && c <= '9'){
num = 10 * num + c - '0';
}else if(c == '['){
stackStr.push(t);
t = new StringBuilder("");
}else if(c == '|'){
stackNum.push(num);
num = 0;
}else if(c == ']'){
int n = stackNum.pop();
StringBuilder sb = stackStr.pop();
for(int j = 0; j < n; j++){
sb.append(t);
}
t = sb;
}else{
t.append(c);
}
}
System.out.println( t.toString());
}
}
查看原帖
点赞 评论
相关推荐
牛客热帖
正在热议
# 25届秋招总结 #
338745次浏览 3225人参与
# 我的实习求职记录 #
6076697次浏览 83588人参与
# 北方华创开奖 #
38633次浏览 401人参与
# 地方国企笔面经互助 #
4757次浏览 12人参与
# 运营商笔面经互助 #
91806次浏览 1328人参与
# 选完offer后,你后悔学本专业吗 #
22318次浏览 160人参与
# 阿里云管培生offer #
38789次浏览 539人参与
# 职场吐槽大会 #
89641次浏览 736人参与
# 如果有时光机,你最想去到哪个年纪? #
23040次浏览 455人参与
# 如何一边实习一边秋招 #
998361次浏览 12679人参与
# 国企还是互联网,你怎么选? #
89607次浏览 697人参与
# 腾讯求职进展汇总 #
197671次浏览 1650人参与
# 银行笔面经互助 #
84134次浏览 887人参与
# 第一份工作应该选择高薪还是大平台 #
88638次浏览 589人参与
# bilibili求职进展汇总 #
33632次浏览 359人参与
# 风评不好的公司,你会去吗? #
20472次浏览 94人参与
# 许愿池 #
215180次浏览 2535人参与
# 上班苦还是上学苦呢? #
77009次浏览 713人参与
# 正在实习的你,几点下班 #
53744次浏览 397人参与
# 国央企薪资爆料 #
12827次浏览 94人参与
# 海康威视求职进展汇总 #
401429次浏览 3413人参与
# 学历or实习经历,哪个更重要 #
54514次浏览 428人参与