• 71. Simplify Path压缩文件的绝对路径


    [抄题]:

    Given an absolute path for a file (Unix-style), simplify it.

    For example,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => "/c"

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    空格属于需要输出的特例,所以先存到hashset中

    deque中啥也没有,就输出/

    Corner Cases:

      • Did you consider the case where path = "/../"?
        In this case, you should return "/".
      • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
        In this case, you should ignore redundant slashes and return "/home/foo".

    [思维问题]:

    [一句话思路]:

    用push pop从一端把该存的存入,用for循环从另一端输出

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. hashset<>(),括号中表示要构造的内容,把array函数放进去
    Arrays.asList("..",".","")

    [二刷]:

    1. deque非空才能POP

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    用push pop从一端把该存的存入,用for循环从另一端输出

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    从左往右走:

    "/b/c/" - directory 'b ' - > directory 'c '
    "." - current directory
    "./" - current directory
    "../" - one directory up
    e.g
    "/" : root directory
    "b/c/../" : it will go from c to b
    "c/b/./" : it is still in directory b

    [算法思想:递归/分治/贪心]:

    [关键模板化代码]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    class Solution {
        public String simplifyPath(String path) {
            //cc
            
            //ini: deque, set,put into deque
            Deque<String> deque = new LinkedList<>();
            Set<String> set = new HashSet<>(Arrays.asList("",".",".."));
            for (String w : path.split("/")) {
                if (w.equals("..") && !deque.isEmpty()) deque.pop();
                else if (!set.contains(w)) deque.push(w); 
            }
            
            //get from deque, res
            String res = "";
            for (String words : deque)
                res = "/" + words + res;
            return res.isEmpty() ? "/" : res;
        }
    }
    View Code
  • 相关阅读:
    Android Studio 开发环境设置
    Android-项目介绍
    Android-开发工具
    在js 中使用ajax 调用后台代码方法,解析返回值
    $.each解析json
    VS2008 "当前不会命中断点。源代码与原始版本不同"解决方法
    64位系统 安装oracle
    session丢失返回登陆页
    DataTable转换为JsonResult
    easyui 绑定数据
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9011516.html
Copyright © 2020-2023  润新知