Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
path = "/a/../../b/../c//.//", => "/c"
path = "/a//b////c/d//././/..", => "/a/b/c"
In a UNIX-style file system, a period ('.') refers to the current directory, so it can be ignored in a simplified path. Additionally, a double period ("..") moves up a directory, so it cancels out whatever the last directory was. For more information, look here: https://en.wikipedia.org/wiki/Path_(computing)#Unix_style
Corner Cases:
- Did you consider the case where path =
"/../"?
In this case, you should return"/". - Another corner case is the path might contain multiple slashes
'/'together, such as"/home//foo/".
In this case, you should ignore redundant slashes and return"/home/foo".
这个题的意思是仿照Unix的路径规划来进行模拟
class Solution {
public:
string simplifyPath(string path) {
path += '/';//首先加上'/'以简化操作
string res,s;
for(auto c : path){
if(res.empty()){//res为实际的串
res += c;
}else if(c != '/'){//读入正常的串(两个'/'之间的串)
s += c;
}else{
if(s == ".."){
if(res.size() > 1){
res.pop_back();
}
while(res.back() != '/'){//连续退,主要是在两个'/'为一段很长的串的时候
res.pop_back();
}
}else if(s != "" && s != "."){//正常添加
res += s + '/';
}
s = "";//将这个串清零
}
}
if(res.size() > 1){
res.pop_back();//去掉'/'
}
return res;
}
};
本文深入探讨了Unix风格文件系统的路径简化算法,通过实例解析如何处理绝对路径中的符号.和..,并提供了详细的代码实现。文章还讨论了特殊情况,如路径中出现连续的斜杠以及/../的情况,确保读者能够全面理解并掌握路径简化的技巧。
1599

被折叠的 条评论
为什么被折叠?



