[LeetCode]71. 简化路径(java实现)模拟题

1. 题目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 读题(需要重点注意的东西)

思路:
用res记录当前路径的位置,然后判断:

  • 如果遇到“…”,则返回上一层路径
  • 如果遇到“.”或者多余的斜杠,不做任何行动
  • 其它情况,表示进入某个子目录,我们在 res 后面补上新路径即可

最后返回简化后得到的规范路径 。

3. 解法

---------------------------------------------------解法---------------------------------------------------

class Solution {
    public String simplifyPath(String path) {
        StringBuilder res = new StringBuilder("");
        String name = "";
        // 给path的末尾加上 "/" 
        if(path.charAt(path.length()-1) != '/') path += "/";
        for(var c : path.toCharArray()){
            // 用name记录从上一个  "/"  到下一个  "/" 中间是什么
            // 如 /home/ ,name = "home"
            if(c != '/') name += c;
            // 如果是分隔符 "/"
            else{
                // 如果name此时是 ".." 返回上级目录
                // 如此时res为 /home/xxx/yyy ---> 简化得 /home/xxx
                if(name.equals("..")){
                    // 去掉yyy
                    while(res.length() != 0 && res.charAt(res.length()-1) != '/') res.deleteCharAt(res.length()-1);
                    // 去掉"/"
                    if(res.length() != 0) res.deleteCharAt(res.length()-1);
                }
                // 如果不是"." 或者 name为空
                // 当存在多个连续的"/"时,name为空,直接跳过即可
                // 否则让当前的文件插入结果路径res中
                else if(!name.equals(".") && !name.equals("")) res.append("/").append(name);
                name = "";
            }
        }

        if(res.length() == 0) res.append("/");
        return res.toString();
    }
}

可能存在的问题:

4. 可能有帮助的前置习题

5. 所用到的数据结构与算法思想

6. 总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloudeeeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值