394. 字符串解码

Posted 不吐西瓜籽

tags:

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

算法记录

LeetCode 题目:

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



说明

一、题目

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

二、分析

  • 如果只是一层结构的,也就是直接从头开始遍历然后遇见 就将保留的字母进行叠加即可。
  • 但是存在嵌套结构的解码,也就可以考虑使用递归的方式来完成。
  • 总共有三种特殊情况可以分支:一是遇见了数字,也就是需要叠加的次数;二是 ,也就是之后的将会是需要叠加的字符串,进入下一层的计算;三是 闭环将保存的字符串进行叠加。
  • 同时需要携带当前计算的位置坐标,防止字符之间重复叠加计算。
  • 将最后遍历完生成的字符串返回即可。
class Solution {
    public String[] split(String s, int i) {
        StringBuffer res = new StringBuffer();
        int num = 0;
        while(i < s.length()) {
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                num = 10 * num + s.charAt(i) - '0';
            } else if(s.charAt(i) == '[') {
                String[] temp = split(s, i + 1);
                i = Integer.parseInt(temp[0]);
                while(num > 0) {
                    res.append(temp[1]);
                    num--;
                }
            } else if(s.charAt(i) == ']') {
                return new String[]{String.valueOf(i), res.toString()};
            } else {
                res.append(s.charAt(i));
            }
            i++;
        }
        return new String[]{res.toString()};
    }

    public String decodeString(String s) {
        return split(s, 0)[0];
    }
}

总结

熟悉递归的使用。

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

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

leetcode 394.字符串解码 Java

leetcode 394 字符串解码.

Leetcode394.字符串解码

Leetcode394.字符串解码

leecode 394. 字符串解码 java版本