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. 字符串解码的主要内容,如果未能解决你的问题,请参考以下文章