Simplify Path(路径简化)

问题:

来源:https://leetcode.com/problems/simplify-path

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

思路:

先将路径按照“/”切分,然后遍历切分后的路径,利用栈的思想,遇到“”或者“.”就忽略,遇到“..”就出栈(除非栈中没有元素),遇到其他字符串就入栈,最后将栈中的字符串用“/”拼接起来

 1 import java.util.Stack;
 2 class Solution {
 3     public String simplifyPath(String path) {
 4         String[] subpaths = path.split("/");
 5         Stack<String> stack = new Stack<String>();
 6         for(String subpath: subpaths) {
 7             if(subpath.equals(".") || subpath.equals("")) {
 8                 continue;
 9             } else if(subpath.equals("..")) {
10                 if(!stack.isEmpty()) {
11                     stack.pop();
12                 }
13             } else {
14                 stack.push(subpath);
15             }
16         }
17         StringBuilder stringBuilder = new StringBuilder();
18         for(String subpath: stack) {
19             stringBuilder.append("/" + subpath);
20         }
21         if(stringBuilder.length() == 0) {
22             stringBuilder.append("/");
23         }
24         return stringBuilder.toString();
25     }
26 }

 

posted @ 2017-11-13 09:23  HitAnyKey  阅读(305)  评论(0编辑  收藏  举报