文章目录

  • 题目描述
  • 参考
  • [编程题]简化路径
  • [NC299 简化目录路径](https://www.nowcoder.com/practice/3177bcbfd947409ba833efb5a5b4a24c?tpId=196&tqId=40136&ru=/exam/oj)

题目描述

现输入一个合法全路径转化并打印其格式化全路径
Linux系统中, 文件全路径以 ’ lua语言格式化 格式化路径_lua语言格式化 ’ 开头和作为分隔符, 开头的 ’ lua语言格式化 格式化路径_lua语言格式化 '为根目录, 作为分 隔符的 ’ lua语言格式化 格式化路径_lua语言格式化 ’ 表示一层目录。
以 文件全路径 “/a/b/file.c” 为例。
lua语言格式化 格式化路径_斜杠_04 ’ 为根目录 ‘/’ 下的子目录
‘b’ 为目录 ‘/a’ 下的子目录
‘file.c’ 为目录 ‘/a/b’ 下的子文件
合法的全路径包含元素:
允许出现多个连续的 lua语言格式化 格式化路径_绝对路径_05, 与一个 ’ lua语言格式化 格式化路径_绝对路径_05 ’ 等价。例如:“a” 表示目录 ‘/a’
允许出现特殊目录 "." ".." , 其中 "." 表示当前层次目录;".." 示当前层次目录 的父目录(根目录的父目录为根)。例如:"/a." 表示目录"/a""/a/.." 表示目 录 "/""/a/b/../.." 表示目录 "/" 格式化的全路径有以下要求:
以 ’ lua语言格式化 格式化路径_lua语言格式化 ’ 开头, 不存在连续的 ’ lua语言格式化 格式化路径_lua语言格式化
不存在特殊目录 "." ".." , 需要转化为等价目录
不以 lua语言格式化 格式化路径_lua语言格式化 结尾 (根目录除外, 根目录的全路径输出即为 “/”)
比如合法全路径 "/a///b//c/..././" 的格式化全路径为 "/a/b"

/a///b//c/..././/a/b

参考


请简化给出的Unix样式的文件绝对路径,也就是转换成规范路径
在Unix样式的文件系统中, .代表当前目录,..表示将目录向上移动一级,更多的介绍可以查看 Absolute path vs relative path in Linux/Unix 请注意,返回的规范路径必须以斜杠“/”开头,并且两个目录名之间只能有一个斜杠“/”开头。如果存在的最后一级目录的话不能以“/”结尾。另外,转化出的规范路径必须是能表示给出的绝对路径的最短字符串。
例如:
文件路径 = "/web/", =>"/web" 文件路径 = "/a/./b/../../c/", =>"/c" 特殊样例:
你有考虑过样例 文件路径 ="/../"吗? 这个样例应该返回"/".
另一种特殊样例是路径中可能相邻的有多个“/”,例如“/home//web/”。这种情况下应该忽略多余的“/”,这个样例应该返回"/home/web".

示例1
输入
"/./"
输出
"/"

示例2
输入
"/.."
输出
"/"

示例3
输入
"/..."
输出
"/..."
class Solution {
public:
    string simplifyPath(string path) 
    {
     vector<string> res;
    stringstream ss(path);
    string sub;
    while(getline(ss,sub,'/'))
    {
        if(sub=="." || sub=="")
            continue;
        else if(sub==".." && res.size())
            res.pop_back();
        else if(sub != "..")
            res.push_back(sub);
    }
    string result;
    for(string temp : res)
        result += '/'+temp;
    return res.empty() ? "/" : result;  
    }
};

NC299 简化目录路径

描述
给定一个目录路径的字符串path,path由英文字母,数字,".","/" 或 "_"组成,表示指向某一个文件或者目录的绝对路径,但是有的路径会有复杂的表达,比如"/../"其实还是代表的根目录路径"/",请你将这个绝对路径转化为一个更加简洁的规范路径,转化规则如下:
1.将1个点"."表示当前目录本身,即"/a/b/./"=>表示的还是"/a/b"
2.将2个点".."表示将目前切换到上一级,即"/a/b/../"其实表示的是"/a"
3.其他数目的点或者点加上其他字符视为一个普通目录路径,比如"/.../a.."表示的是根目下有一个名字为"..."的目录文件,"..."的文件下面还有一个名字为"a.."的文件
4.任意多个连续的斜杠都被视为单个斜杠,即 "///"和"//"都被视为"/"

你返回的简化规范路径应该如下:
5.始终以斜杠 '/' 开头
6.两个目录名之间必须只有一个斜杠 '/'
7.最后一个目录名不能 以 '/' 结尾,根目录除外,根目录只有一个"/"
8.路径仅包含从根目录到目标文件或目录的路径上的目录,即除了"."和".."的东西应该简化,其余的普通字符应该保留下来,视为目录路径

数据范围:
lua语言格式化 格式化路径_unix_10 path.length lua语言格式化 格式化路径_斜杠_11

示例1
输入:
"/home/web/"
返回值:
"/home/web"

示例2
输入:
"/homeweb//"
返回值:
"/home/web"
说明:
在简化规范路径中,多个连续的"/"替换为"/", 

示例3
输入:
"/../"
返回值:
"/"
说明:
"/"是根目录,是顶级目录,它的上级目录还是自己
 
示例4
输入:
"/home/web/./tang/../miao/"
返回值:
"/home/web/miao"
说明:
"/home/web/./"表示的是"/home/web",因为"."表示当前目录,但是"/home/web/./tang/../"表示的还是"/home/web",因为".."表示父目录,"/home/web/tang"的父目录就是"/home/web"