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 @ 2022-03-30 22:12  是徐洋洋呀  阅读(52)  评论(0)    收藏  举报