394. 字符串解码

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了394. 字符串解码相关的知识,希望对你有一定的参考价值。

  1. 字符串解码

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

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

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

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

示例 1:

输入:s = “3[a]2[bc]”
输出:“aaabcbc”
示例 2:

输入:s = “3[a2[c]]”
输出:“accaccacc”

class Solution {
    public String decodeString(String s) {
        Stack<String> result = new Stack<>();
        char[] datas = s.toCharArray();
        for(int i = datas.length-1; i >=0;){
            if(datas[i] == '['){
                StringBuffer item = new StringBuffer();
                while(!"]".equals(result.peek())){
                    item.append(result.pop());
                }
                result.pop();
                String str = item.toString();
                int end = i;
                while (i > 0 && Character.isDigit(datas[--i]));
                String tmp = s.substring(i == 0 ? 0 : i + 1, end);
                int size = Integer.parseInt(tmp);
                for (int k = 0; k < size; k++) {
                    result.push(str);
                }
                if(i == 0) break;
            }else{
                result.push(String.valueOf(datas[i]));
                i--;
            }
        }
        StringBuffer res = new StringBuffer();
        while(result.size()>0){
            res.append(result.pop());
        }
        return res.toString();
    }
}

以上是关于394. 字符串解码的主要内容,如果未能解决你的问题,请参考以下文章

java 394.解码字符串(#dfs).java

leetcode 394.字符串解码 Java

leetcode 394 字符串解码.

Leetcode394.字符串解码

Leetcode394.字符串解码

leecode 394. 字符串解码 java版本