LeetCode--71. Simplify Path

题目链接:https://leetcode.com/problems/simplify-path/

题意比较复杂难懂,但多看几遍例子就差不多了。文件夹目录的目录名的层次关系用"/"分隔,"."表示当前文件夹,".."表示从当前文件夹回退到父文件夹,而字母表示的是文件夹的名字,关键信息就是这些,还要注意一些corner cases,问题中已经给出提示了。这里的难点就是这个回退到父文件夹,这里可以用栈这种数据结构来做,最终从栈顶到栈底存储的就是从子文件夹到父文件夹的名字了,这里还需要借用一个栈来将顺序恢复成从父文件夹到子文件夹,这里我们是使用双端队列(deque),Java中的双端队列是基于链表或顺序表来实现的,算法代码如下:

class Solution {
    public static String simplifyPath(String path) {

        String[] strs=path.split("\\/");

        Deque deq=new LinkedList<>();

        for(String str:strs)
        {
            if(str.equals("") || str.equals("."))
                continue;
            else if(str.equals(".."))
                deq.pollLast();
            else
                deq.add(str);
        }

        if(deq.isEmpty())
            return "/";
        StringBuilder sb=new StringBuilder();
        while(!deq.isEmpty())
        {
            sb.append('/').append(deq.pollFirst());
        }
        return sb.toString();
    }
}

 

你可能感兴趣的:(LeetCode--71. Simplify Path)