• (描述需要改进) 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


  • 相关阅读:
    MIT 6.828 JOS学习笔记10. Lab 1 Part 3: The kernel
    Java基础知识点4:继承
    CentOS Installation
    超微主板创建RAID磁盘阵列
    MySQL查询语句
    Psql操作命令
    Let's Encrypt 免费 SSL 证书续期
    Linux系统禁用swap分区
    公共 NTP 服务器地址
    Postgresql配置
  • 原文地址:https://www.cnblogs.com/2Bthebest1/p/10835095.html
Copyright © 2020-2023  润新知