其他分享
首页 > 其他分享> > LeetCode 0071 Simplify Path

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