文章目录
题目描述
现输入一个合法全路径转化并打印其格式化全路径
Linux系统中, 文件全路径以 ’
/
/
/ ’ 开头和作为分隔符, 开头的 ’
/
/
/ '为根目录, 作为分 隔符的 ’
/
/
/ ’ 表示一层目录。
以 文件全路径 “/a/b/file.c” 为例。
’
a
a
a ’ 为根目录 ‘/’ 下的子目录
‘b’ 为目录 ‘/a’ 下的子目录
‘file.c’ 为目录 ‘/a/b’ 下的子文件
合法的全路径包含元素:
允许出现多个连续的
/
\mathrm{/}
/, 与一个 ’
/
\mathrm{/}
/ ’ 等价。例如:“a” 表示目录 ‘/a’
允许出现特殊目录 "."
".."
, 其中 "."
表示当前层次目录;".."
示当前层次目录 的父目录(根目录的父目录为根)。例如:"/a."
表示目录"/a"
;"/a/.."
表示目 录 "/"
;"/a/b/../.."
表示目录 "/"
格式化的全路径有以下要求:
以 ’
/
/
/ ’ 开头, 不存在连续的 ’
/
/
/ ’
不存在特殊目录 "."
".."
, 需要转化为等价目录
不以
/
/
/ 结尾 (根目录除外, 根目录的全路径输出即为 “/”)
比如合法全路径 "/a///b//c/..././"
的格式化全路径为 "/a/b"
/a///b//c/..././
/a/b
参考
[编程题]简化路径
链接:https://www.nowcoder.com/questionTerminal/393e5a246a7546d1b2e4d7719647b7d9
来源:牛客网
请简化给出的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.路径仅包含从根目录到目标文件或目录的路径上的目录,即除了"."和".."的东西应该简化,其余的普通字符应该保留下来,视为目录路径
数据范围:
1
≤
1 \leq
1≤ path.length
≤
1
0
5
\leq 10^5
≤105
示例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"