likes
comments
collection
share

LeetCode第71题简化路径

作者站长头像
站长
· 阅读数 11

继续打卡算法题,今天学习的是LeetCode71题简化路径,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

LeetCode第71题简化路径

分析一波题目

经常使用linux系统命令的同学,解决这个题目应该不难,我们需要理解几个路径切换命令:

. 表示当前目录,这种情况我们在简化路径的时候其实是可以忽略这种命令。 比如 /home/./ 恒等于 /home

.. 表示跳转到上一层目录,/home/d/../ 恒等于 /home

有没有发现规律?我们遇到了..命令的时候,需要把上一个路径名忽略。比如下面的路径切换

LeetCode第71题简化路径

这样我们在遍历元素的路径的时候,通过/分隔,按上面的规律分别处理...命令,处理..命令需要对上一个命令进行操作,我们这种情况可以借助栈的后进先出特性解决,将命令通过栈来存储。

本题解题技巧

1、通过栈特性,解决..命令需要移除上一个命令的情况

编码解决

class Solution {
    public String simplifyPath(String path) {
        String[] names = path.split("/");
        Deque<String> stack = new ArrayDeque<String>();
        for(String name : names) {
            if(name.equals("..")) {
                stack.poll();
            } else if(name.length()>0 && !name.equals(".")){
                stack.push(name);
            }
        }
        String result = "/";
        while(!stack.isEmpty()) {
            String r = stack.pollLast();
            result += stack.isEmpty() ? r :  r + "/";
        }
        return result;
    }
}

总结

1、栈的后进先出的特性,对命令操作的场景非常实用,命令一层一层切进入,需要一层一层切出来