zoukankan      html  css  js  c++  java
  • LeetCode 简化路径(探索字节跳动)

    题目描述

    给定一个文档 (Unix-style) 的完全路径,请进行路径简化。

    例如,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => "/c"

    边界情况:

    • 你是否考虑了 路径 = "/../" 的情况?
      在这种情况下,你需返回 "/" 。
    • 此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。
      在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。

    解题思路

    对于每两个'/'之间的字符串,用一个数组来记录它们,分为以下几种情况:

    • 若是'.',直接跳过;
    • 若是"..",说明指代上一级目录,所以从数组中去掉最后加进去的子目录;
    • 若不为空,则将其加入数组中

    最后依次用'/'按顺序将每个子目录组合成总路径。

    代码

     1 class Solution {
     2 public:
     3     string simplifyPath(string path) {
     4         string res = "", temp = "";
     5         path += "/";
     6         vector<string> dirs;
     7         int len = path.length(), i = 0;
     8         while(i < len){
     9             if(path[i] == '/'){
    10                 if(temp == ".."){
    11                     if(dirs.size())
    12                         dirs.pop_back();
    13                 }
    14                 else if(temp != "." && temp != "")
    15                     dirs.push_back(temp);
    16                 temp = "";
    17                 while(i < len && path[i] == '/')
    18                     i++;
    19             }
    20             else{
    21                 temp += path[i++];
    22             }
    23         }
    24         for(int i = 0; i < dirs.size(); i++){
    25             res += "/";
    26             res += dirs[i];
    27         }
    28         if(res == "") return "/";
    29         return res;
    30     }
    31 };
  • 相关阅读:
    URL记录
    Mongodb集群节点故障恢复场景分析(转)
    IO 和 NIO 的区别
    VUE 前端项目优化方法
    缓存的穿透和雪崩
    接口如何处理重复请求?
    线程池构造类 ThreadPoolExecutor 的 5 个参数
    大型网站在架构上应当考虑哪些问题
    synchronized 和 lock 的区别
    JVM虚拟机 YGC和FGC发生的具体场景
  • 原文地址:https://www.cnblogs.com/wmx24/p/10146066.html
Copyright © 2011-2022 走看看