首页 > 其他分享 >1201-字符串编码

1201-字符串编码

时间:2024-12-01 15:32:41浏览次数:6  
标签:tmp 编码 LinkedList 重复 StringBuilder 1201 res 字符串 new

最小栈 leetcode 394.

题目大意:[]前的数字为出现的次数,中的内容会要重复的数据,例如
输入:
s = "3[a2[c]]"
输出:
"accaccacc"
解题思路:主要难点为 嵌套中括号,利用栈的特点设计两个LinkedList存储次数和重复值,每次遇到左括号的时候将当前的数字和重复值分别入栈,遇到右括号的时候将数字栈的最后一个值取出来为重复次数for,重复内容则是当前重复值而非重复值栈中的值,重复值栈中存储的是更外一层中括号的重复值,它需要用来拼接当前计算重复值以便循环使用
题解及注释:

class Solution {
    public String decodeString(String s) {
        StringBuilder res = new StringBuilder();
        int multi = 0;
        LinkedList<Integer> multiS = new LinkedList<>();
        LinkedList<String> resS = new LinkedList<>();

        for (Character c : s.toCharArray()) {
            if ('[' == c) {
                multiS.addLast(multi);
                resS.addLast(res.toString());
                multi = 0;
                res = new StringBuilder();
            }
            else if (']' == c) {
                StringBuilder tmp = new StringBuilder();
                int tmpMulti = multiS.removeLast();
                for (int i = 0; i < tmpMulti; i++) {
                    tmp.append(res);
                }
                res = new StringBuilder(resS.removeLast() + tmp);
            }
            else if (c >= '0' && c <= '9') multi = multi*10 + Integer.parseInt(c+"");
            else res.append(c);
        }
        return res.toString();
        
    }
}

总结:对于左右括号情况判断处理确实还是不明白,只能说理解了要是没有具体题解可看根本是想不出来的

标签:tmp,编码,LinkedList,重复,StringBuilder,1201,res,字符串,new
From: https://www.cnblogs.com/hgao/p/18579819

相关文章

  • 字符串比较内容、模拟用户登录案例
    1.equals、equalsIgnoreCase在之前我们使用“==”比较的是字符串的地址,但是地址对于我们来说没有用,我们要比较的是字符串的内容。而equals和equalsIgnoreCase就是用于比较字符串的内容的两种方法1.equals比较两个对象的内容是否一致,如果一致则为true,否则为false调用方式:直接......
  • P11361 [NOIP2024] 编辑字符串
    题目大意详细题目传送门两个\(01\)串,可以对两个串中任意相邻的字符进行交换,没有代价可以进行任意多次。可是两个串有的位置的字符是定死的,无法被交换,求任意次操作后最多让两个串的多少个位置\(01\)相等。即\(\sum[a_i=b_i]\)。\(n\leq10^5\)思路首先根据冒泡排序的性......
  • 洛谷P11361 [NOIP2024] 编辑字符串
    ProblemSolve首先任意更换相邻元素任意次等同于在可交换范围内随便移动这题是求最优解,直观想到DP和贪心,但是容易反应过来本题DP的话很难做到无后效性,且状态较多,故尝试贪心不难发现,我们从左往右遍历的某个时刻进行交换后所得到的局部最优解总是答案的一种方案的一部分原因......
  • 1201-用栈实现最小队列
    最小栈leetcode232.题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要......
  • 20241201每日一题洛谷P1683
    普及-每日一题洛谷P1683题目描述不是任何人都可以进入桃花岛的,黄药师最讨厌像郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有喷出要命的毒气,那你就死翘翘了,我们认为......
  • 使用js写一个计算字符串的字节数的方法
    functiongetByteLength(str){letbyteLength=0;for(leti=0;i<str.length;i++){constcharCode=str.charCodeAt(i);if(charCode<=0x007f){byteLength+=1;}elseif(charCode<=0x07ff){byteLength+=2;......
  • 编一个程序,从键盘上输入一串符号(以回车键为结束),将其以字符串形式存入一维字符数组,然后
    大学作业,运行不了就把每个for循环里面的int提出来,括号内保留i就行了!!!!!多的我不说了,代码放地下自取自拿,某人在这里求个赞,陆续会更新实验3-5,所有作业都有复制(自取)版和详解版,记得关注,谢谢各位:tips:gets在C11版本被删去,目前仅仅是用于大学计算机,正式版我也放在末尾并说明区别自取版:......
  • 425 周赛第2题 3365. 重排子字符串以形成目标字符串
     给你两个字符串 s 和 t(它们互为字母异位词),以及一个整数 k。你的任务是判断是否可以将字符串 s 分割成 k 个等长的子字符串,然后重新排列这些子字符串,并以任意顺序连接它们,使得最终得到的新字符串与给定的字符串 t 相匹配。如果可以做到,返回 true;否则,返回 false。......
  • 如何实现字符串反转-多语言
    目录C语言实现方法1:使用指针方法2:使用递归方法3:使用栈Python实现方法1:列表反转方法2:使用切片方法3:使用reversed()函数 方法4:使用递归方法5:使用for循环Java实现方法1:字符串转换成字符数组方法2:使用StringBuilder的revers......
  • 【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?
    【NLP高频面题-LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?重要性:⭐⭐⭐......