题解 | #压缩算法#

压缩算法

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();
    }
}
全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务