LeetCode 0071 Simplify Path
作者:互联网
1. 题目描述
2. Solution
1、思路分析
分析
对于 path 的预处理: 两端去空白 + '/' 分割 -> 得到 String[] dirs
遍历 dirs,工作变量为dir
case 1. dir = "." -> do nothing
case 2. dir = ".." 显然,需要把之前遍历到的dir缓存,需要返回上一级,符合后进先出(栈) -> 弹栈
case 3. dir = "" 由"//"切割而来 -> do nothing
case 4. dir = "xxxx" -> 入栈
2、代码实现
package Q0099.Q0071SimplifyPath;
import java.util.*;
/*
分析
对于 path 的预处理: 两端去空白 + '/' 分割 -> 得到 String[] dirs
遍历 dirs,工作变量为dir
case 1. dir = "." -> do nothing
case 2. dir = ".." 显然,需要把之前遍历到的dir缓存,需要返回上一级,符合后进先出(栈) -> 弹栈
case 3. dir = "" 由"//"切割而来 -> do nothing
case 4. dir = "xxxx" -> 入栈
*/
public class Solution {
public String simplifyPath(String path) {
// corner case
if (path == null || path.length() == 0) return "";
String[] dirs = path.trim().split("/");
Deque<String> stack = new ArrayDeque<>();
Set<String> skips = new HashSet<>(Arrays.asList("..", ".", ""));
for (String dir : dirs) {
if (!stack.isEmpty() && "..".equals(dir)) {
stack.removeLast();
// } else if (!".".equals(dir) && !"..".equals(dir) && !"".equals(dir)) {
} else if (!skips.contains(dir)) {
stack.addLast(dir);
}
}
// 组装
return "/" + String.join("/", stack);
}
}
3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)
标签:case,dirs,String,stack,0071,Simplify,path,LeetCode,dir 来源: https://www.cnblogs.com/junstat/p/16184291.html