zoukankan      html  css  js  c++  java
  • (描述需要改进) Leetcode No.71 **

    以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

    示例 1:

    输入:"/home/"
    输出:"/home"
    解释:注意,最后一个目录名后面没有斜杠。
    

    示例 2:

    输入:"/../"
    输出:"/"
    解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
    

    示例 3:

    输入:"/home//foo/"
    输出:"/home/foo"
    解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
    

    示例 4:

    输入:"/a/./b/../../c/"
    输出:"/c"
    

    示例 5:

    输入:"/a/../../b/../c//.//"
    输出:"/c"
    

    示例 6:

    输入:"/a//b////c/d//././/.."
    输出:"/a/b/c"

    解答:逻辑如下:
    【1】所有相连的斜杠均可以取消,不保留,用start来记录状态;
    【2】循环找相连的 '.',最后的位置为path[i-1],截取该字符串。
    【3】判断是否为".."
         判断p是否为空,是则contunue,否则弹出;
      若不是'.'且s不为空,则p压入s;
      若p为空,则直接返回'/';
      否则依次添加路径
      
                


    //71
    string simplifyPath(string path)
    {
        vector<string> p;
        string res;
        int i=0,start;
    
        while(i<path.size())
        {
            while(i<path.size() && path[i]=='/') i++;//斜杠全部可以取消,不保留
            start = i;
            while(i<path.size() && path[i]!='/') i++;
            string s = path.substr(start,i-start);
            start = i;
            if(s == ".." )
            {
                if(!p.empty())  p.pop_back();
                continue;
            }
    
            else if(s!="." && s!="") p.push_back(s);
        }
        if(p.empty()) return "/";
        for(string s: p)
            res = res+ "/" +s;
        return res;
    }//71


  • 相关阅读:
    上传文件到七牛云
    工具类
    SpringBoot 整合 JWT Token
    JWT
    SpringBoot使用RedisTemplate整合Redis
    poj1850 Code
    洛谷P1313 计算系数
    洛谷P1602 Sramoc问题
    —Libre#2009. 「SCOI2015」小凸玩密室
    2014-9-27 NOIP模拟赛
  • 原文地址:https://www.cnblogs.com/2Bthebest1/p/10835095.html
Copyright © 2011-2022 走看看