给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
边界情况:
-
你是否考虑了 路径 = "/../" 的情况?
在这种情况下,你需返回 "/" 。
-
此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。
在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。
解题思路:
先解释一下给定的字符串中,除路径分隔符"/"外,可能出现的字符串
- 正常路径文件名
- "."-表示当前目录,因此可忽略
- ".."-表示上层目录,因此需退到上一层,可用栈实现
主要思路:用路径分隔符"/"分割所给路径,遍历分割之后的字符串数组
- 遇到空字符串或者".",跳过
- 遇到"..",则将栈顶元素弹出(若栈不为空)
- 否则为正常路径文件名,入栈
遍历完成后,若栈为空,则返回根目录"/",否则将栈中元素用路径分隔符"/"分割组成路径返回。
java代码:
class Solution {
public String simplifyPath(String path) {
if(null == path || 0 == path.length())
return "/";
String[] dir = path.split("/");
Stack<String> stack = new Stack<String>();
for(int i = 0; i < dir.length; i++) {
if(".".equals(dir[i]) || "".equals(dir[i]))
continue;
if("..".equals(dir[i])) {
if(!stack.empty())
stack.pop();
continue;
}
stack.push(dir[i]);
}
String res = "";
while(!stack.empty())
res = "/" + stack.pop() + res;
return res.length() == 0 ? "/" : res.toString();
}
}