394--字符串编码(技巧)

题目

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"

题解

点击查看代码
class Solution {
    public String decodeString(String s) {
      StringBuilder builder=new StringBuilder();
        Stack<StringBuilder> cstack=new Stack<>();
        Stack<Integer> nstack=new Stack<>();
        int num=0;
        char[] chars = s.toCharArray();
        for (char aChar : chars) {
            if(Character.isDigit(aChar)){
                num=num*10+aChar-'0';
            }
           else if(aChar=='['){
                cstack.push(builder);
                nstack.push(num);
                builder=new StringBuilder();
                num=0;
            }
            else if(Character.isAlphabetic(aChar)){
                builder.append(aChar);
            }
            else {
                Integer l = nstack.pop();
                StringBuilder pop = cstack.pop();
                for(int i=0;i<l;i++){
                    pop.append(builder);
                }
                builder=pop;
            }
        }
        return builder.toString();
    }
}

技巧

  1. 计数的时候用了 num=num*10+aChar
  2. 用了两个栈,一个栈是数字栈,还有一个栈是字符串栈。所以两个交替使用。并且用了StringBUffer用来存储每次产生的String
posted @   是徐洋洋呀  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示