1. 程式人生 > >leetcode - 71 簡化路徑

leetcode - 71 簡化路徑

給定一個文件 (Unix-style) 的完全路徑,請進行路徑簡化。

例如,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

邊界情況:

  • 你是否考慮了 路徑 = "/../" 的情況?
    在這種情況下,你需返回 "/" 。
  • 此外,路徑中也可能包含多個斜槓 '/' ,如 "/home//foo/" 。
    在這種情況下,你可忽略多餘的斜槓,返回 "/home/foo" 。

再加上兩個例子 path = "/a/./b/../c/"

, => "/a/c"和path = "/a/./b/c/", => "/a/b/c", 這樣我們就可以知道中間是"."的情況直接去掉,是".."時刪掉它上面挨著的一個路徑,而下面的邊界條件給的一些情況中可以得知,如果是空的話返回"/",如果有多個"/"只保留一個。那麼我們可以把路徑看做是由一個或多個"/"分割開的眾多子字串,把它們分別提取出來一一處理即可。

參考:http://www.cnblogs.com/grandyang/p/4347125.html

public String simplifyPath(String path) {
    Stack<String> s = new Stack<>();
    String[] p = path.split("/");
    for(String t : p){
        if(!s.isEmpty() && t.equals("..")){
            s.pop();
        }else if(!t.equals(".") && !t.equals("") && !t.equals("..")){
            s.push(t);
        }
    }
    List<String> list = new ArrayList(s);
    return "/" + String.join("/", list);
}