题意:给定一个文件的绝对路径(Unix风格),简化它
注意特殊情况:/../返回/,//多个/在一起,去掉多余的/只算一个/
思路 正则表达式,以及注意特殊的字符“/..” ,".", "",后来参考discuss
public static String simplifyPath(String path) {
Deque
stack = new LinkedList<>();
HashSet
skipSet = new HashSet<>(Arrays.asList("..",".",""));//"..."不在跳过之列
String parts[] = path.split("/");
for(String dir : parts){ //O(n)
if(dir.equals("..") && !stack.isEmpty())
stack.pop();//返回上层目录/..
else{
if(!skipSet.contains(dir)){//O(1)
stack.push(dir);
}
}
}
String res = "";
if(stack.isEmpty()) //处理输入为"/"的情况
return "/";
for(String dir : stack){ //集合或者数组实现了iterable接口
res = "/" + dir + res; //stack迭代器也是LIFO(子目录在链表的前面,父目录在后面)
}
return res;
}