关注
解决第一题的方法其实和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());
}
}
查看原帖
点赞 评论
相关推荐
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 哪些公司在招寒假实习? #
15783次浏览 195人参与
# 国企vs私企,你更想去? #
305792次浏览 2491人参与
# MiniMax求职进展汇总 #
773次浏览 23人参与
# 26年哪些行业会变好/更差 #
18998次浏览 256人参与
# 卷__卷不过你们,只能卷__了 #
12124次浏览 265人参与
# 有深度的简历长什么样? #
16672次浏览 341人参与
# 写论文的崩溃时刻 #
6537次浏览 148人参与
# 去年的flag与今年的小目标 #
10137次浏览 196人参与
# 关于春招你都做了哪些准备? #
122227次浏览 707人参与
# 机械人,你最希望上岸的公司是? #
198171次浏览 1917人参与
# 现在还是0offer,延毕还是备考 #
1256606次浏览 7922人参与
# 你不能接受的企业文化有哪些 #
11966次浏览 169人参与
# 入职第一天 #
10195次浏览 219人参与
# 租房前辈的忠告 #
350522次浏览 7445人参与
# 你都用AI做什么 #
6908次浏览 156人参与
# 你怎么看待AI面试 #
133444次浏览 745人参与
# 发工资后,你做的第一件事是什么 #
93146次浏览 311人参与
# 最难的技术面是哪家公司? #
62970次浏览 949人参与
# 腾讯音乐求职进展汇总 #
147962次浏览 1053人参与
# 华为池子有多大 #
159182次浏览 877人参与
# 一人分享一道面试手撕题 #
23098次浏览 811人参与
上海得物信息集团有限公司公司福利 1263人发布