LeetCode——71.简化路径

通过万岁!!!

  • 题目:给你一个表示路径的字符串,然后里面有…/、./、//和普通的路径然后找到他的简化路径。其中…/表示上一级、./表示本级、//表示本级别。简单的说就是这个路径是一个多次变化的路径,然后让我们找到直接到达的路径。然后给定的路径字符串path是由/开始的,要求返回的也是由、开始,并且最后没有/.
  • 思路:我们就按照这个路径走一遍就行了,然后用一个东西存储一下就行了。假设我们用容器A存储,那么我们最后把每层的文件夹都放进去,然后访问上一级就是访问刚刚放进去的。芜湖,这不是栈么。而至于怎么找到每个文件夹,我们直接用/对字符串进行split不就行了。
  • 技巧:
    • 这里我们模拟了这个找路径的过程,也就是使用了一个栈。
    • 最后我们需要注意的是,我们得到最终字符串的时候,需要出栈,而出栈是最后的文件夹,因此我们构造这个字符串,需要一点一点出栈,然后从前面加入到这个字符串中。
    • 这里字符串还是不断变化的,我们使用StringBuilder字符串,效率应该回高一点。

伪代码

我们先对path进行分割成数组,需要注意,因为path的第一个是/,这样数组的第一个就是空
然后定义一个栈
for遍历数组,因为数组的第一个是空,因此我们遍历数组从1开始就可以了
    这里有几种情况需要继续判断,所以使用switch
    如果是"..",那就在能出栈的情况下出栈,然后break
    如果是".",那么就不做任何处理
    如果是"",也不做任何处理,然后break;这里跟上面的"."一块break即可,因此上面的不用break。是空的情况是因为有//的时候
    其他情况,入栈即可
然后定义StringBuilder对象sb
首先判断栈是不是空,要是空的话,直接renturn "/"即可。
然后这里while遍历栈,条件是栈不为空
      往sb的前面追加字符串"/"+栈内内容即可
最后将sb转成String并return。

java代码

class Solution {
    public String simplifyPath(String path) {
        String[] paths = path.split("/");
        Stack<String> stack = new Stack<>();
        for (int i = 1; i < paths.length; i++) {// 从1开始是因为path最开始是/,这样split以后,第一个是空
            switch (paths[i]) {
                case "..":
                    if (!stack.isEmpty())// 不是空就出栈
                        stack.pop();
                    break;
                case ".":
                case "":// 这是因为里面有可能出现//,双斜杠表示但斜杠
                    break;
                default:
                    stack.push(paths[i]);
            }
        }
        StringBuilder sb = new StringBuilder();
        if (stack.isEmpty()) return "/";
        while (!stack.isEmpty()) {// 这里必须是前插法
            sb.insert(0, "/" + stack.pop());
        }
        return sb.toString();
    }
}
  • 总结:主要是跟栈联系上,这个题不麻烦的,情况也不是很多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值