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();
    }
}