# [LeetCode 71] Simplify Path

### Question

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"`.

### Stats

 Frequency 1 Difficulty 3 Adjusted Difficulty 4 Time to use --------

Ratings/Color = 1(white) 2(lime) 3(yellow) 4/5(red)

### Analysis

This is a very difficult string question. I read this blog and then understands the question. The solution is just straight-forward without any fancy algo/thinkings.

[解题思路]

1. 等于“/”，跳过，直接开始寻找下一个element
2. 等于“.”，什么都不需要干，直接开始寻找下一个element
3. 等于“..”，弹出栈顶元素，寻找下一个element
4. 等于其他，插入当前elemnt为新的栈顶，寻找下一个element

### Solution

Simply make use of stack and read thru all substrings seperated by /.

### Code

``````public String simplifyPath(String path) {
Stack<String> stack = new Stack<String>();
String[] list = path.split("/");
for(String cur: list) {
if (cur.equals("/") || cur.equals(".")
|| cur.equals("")) continue;
if (cur.equals("..")) {
if (! stack.isEmpty()) stack.pop();
} else stack.push(cur);
}
String ans = "";
if (stack.isEmpty()) return "/";
while (! stack.isEmpty()) {
ans = "/" + stack.pop() + ans;
}
return ans;
}
``````