题目链接:https://leetcode.com/problems/simplify-path/
题意比较复杂难懂,但多看几遍例子就差不多了。文件夹目录的目录名的层次关系用"/"分隔,"."表示当前文件夹,".."表示从当前文件夹回退到父文件夹,而字母表示的是文件夹的名字,关键信息就是这些,还要注意一些corner cases,问题中已经给出提示了。这里的难点就是这个回退到父文件夹,这里可以用栈这种数据结构来做,最终从栈顶到栈底存储的就是从子文件夹到父文件夹的名字了,这里还需要借用一个栈来将顺序恢复成从父文件夹到子文件夹,这里我们是使用双端队列(deque),Java中的双端队列是基于链表或顺序表来实现的,算法代码如下:
class Solution {
public static String simplifyPath(String path) {
String[] strs=path.split("\\/");
Deque<String> 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();
}
}