Leetcode: Simplify Path
2014-11-08 15:56
190 查看
Given an absolute path for a file (Unix-style), simplify it.
For example,
path =
path =
click to show corner cases.
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
such as
In this case, you should ignore redundant slashes and return
Use stack to store each path name between "/". If ".." appears, pop the stack, if "." appears, do nothing, else push that path name into the stack. When this is done, send the names to a string, and add "/" between them.
public class Solution {
public String simplifyPath(String path) {
if (path == null || path.length() == 0) {
return path;
}
Stack<String> stack = new Stack<String>();
int i = 0;
while (i < path.length()) {
StringBuilder sb = new StringBuilder();
while (i < path.length() && path.charAt(i) != '/') {
sb.append(path.charAt(i));
i++;
}
String temp = sb.toString();
if (!temp.isEmpty()) {
if (temp.equals("..")) {
if (!stack.isEmpty()) {
stack.pop();
}
} else if (!temp.equals(".")) {
stack.push(temp);
}
}
i++;
}
StringBuilder res = new StringBuilder();
while (!stack.isEmpty()) {
res.insert(0, "/" + stack.pop());
}
if (res.length() == 0) {
return "/";
}
return res.toString();
}
}
For example,
path =
"/home/", =>
"/home"
path =
"/a/./b/../../c/", =>
"/c"
click to show corner cases.
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".
Use stack to store each path name between "/". If ".." appears, pop the stack, if "." appears, do nothing, else push that path name into the stack. When this is done, send the names to a string, and add "/" between them.
public class Solution {
public String simplifyPath(String path) {
if (path == null || path.length() == 0) {
return path;
}
Stack<String> stack = new Stack<String>();
int i = 0;
while (i < path.length()) {
StringBuilder sb = new StringBuilder();
while (i < path.length() && path.charAt(i) != '/') {
sb.append(path.charAt(i));
i++;
}
String temp = sb.toString();
if (!temp.isEmpty()) {
if (temp.equals("..")) {
if (!stack.isEmpty()) {
stack.pop();
}
} else if (!temp.equals(".")) {
stack.push(temp);
}
}
i++;
}
StringBuilder res = new StringBuilder();
while (!stack.isEmpty()) {
res.insert(0, "/" + stack.pop());
}
if (res.length() == 0) {
return "/";
}
return res.toString();
}
}
相关文章推荐
- LeetCode : Simplify Path
- leetcode笔记--Simplify Path
- Leetcode135: Simplify Path
- [C++]LeetCode: 117 Simplify Path (简化Unix路径 list双向链表)
- LeetCode: Simplify Path
- LeetCode - Simplify Path
- Simplify Path(LeetCode)
- 145_leetcode_Simplify Path
- 【leetcode刷题笔记】Simplify Path
- LeetCode -- Simplify Path
- [LeetCode]71 Simplify Path
- LeetCode 71. Simplify Path
- 【LeetCode】Simplify Path 解题报告
- leetcode--Simplify Path
- leetcode-Simplify Path
- LeetCode(45) Simplify Path
- [leetcode]Simplify Path
- [leetcode]Simplify Path
- [leetcode]Simplify Path
- LeetCode: Simplify Path