题目:
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
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".
class Solution {
public:
/***
* 注意几个细节:
* 1)重复连续出现的'/',只按1个处理,即跳过重复连续出现的'/';
* 2)如果路径名是".",则不处理;
* 3)如果路径名是"..",则需要弹栈,如果栈为空,则不做处理;
* 4)如果路径名为其他字符串,入栈。
*
*
* */
string simplifyPath(string path) {
int size = path.size();
stack<string> ss;
for(int i = 0; i < size;){
//跳过'/'
while('/' == path[i] && i < size)
++ i;
//记录路径名称
string s = "";
while('/' != path[i] && i < size)
s += path[i ++];
//对当前路径进行处理
if(s == ".." && !ss.empty())
ss.pop();
else if(s != "" && s!= "." && s != "..")
ss.push(s);
}
string res = "";
if(ss.empty())
return "/";
else{
//注意输出顺序
while(!ss.empty()){
res = "/" + ss.top() + res;
ss.pop();
}
}
return res;
}
};
本文介绍了一个C++程序,用于简化Unix风格的文件绝对路径。通过解析路径中的特殊符号如'.'和'..',以及多余的斜杠,将路径规范化。
1267

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



