题解 | #压缩算法#
压缩算法
http://www.nowcoder.com/questionTerminal/ebf85b76361245f4a3ac273e6876c662
DFS
和LeetCode 394题目,基本一样。
解法参考的ACVV的力扣究极班的写法。
加一个这个题目的通解吧。
这种类型的题目可以直接背过。
定义一个u的成员变量进行DFS,然后 碰到字母就append(),当碰到左括号,代表需要进入递归,然后把这个重复的数字算出来,递归的出口是碰到右括号。
我理解的是: 字母[递归计算]字母[字母[递归计算]]。
import java.util.*;
public class Solution {
String s;
int u = 0;
public String compress (String s) {
this.s = s;
return dfs();
}
private String dfs() {
StringBuilder res = new StringBuilder();
while (u < s.length() && s.charAt(u) != ']') {
if (Character.isLetter(s.charAt(u))) res.append(s.charAt(u++));
else if (s.charAt(u) == '[') {
u+=1; // 过滤掉左括号
int w = u;
while (Character.isDigit(s.charAt(w))) w++;
int k = Integer.parseInt(s.substring(u, w));
u = w + 1; // 过滤掉|
String tmp = dfs();
u+=1; // 过滤掉]
while (k-- > 0) res.append(tmp);
}
}
return res.toString();
}
}