這一題參考了別人的做法

主要有幾個重點,

  1. lev 儲存的是有幾個 \t ,表示目前是在第幾層的資料夾中。
  2. curLen 最後之所以要 -lev+1 是因為要把檔案的路徑表示成一般人看的形式,所以要移掉\t的數量,再加上一個\所佔的數量。
  3. stack[lev]儲存的是,到目前這個檔案之前,所有parent的dir的總長度,例如dir\n\tsubdir1這個範例,當我們要算subdir1的curLen時,他的lev是1,stack[1]裡面存的值是4,表示的是\dir的長度。(這邊要特別注意!因為即使dir沒有\t,但在計算他的長度的時候還是有+1,所以在更新maxLen的時候,需要再-1,所以是算Math.max(maxLen, curLen-1); )

Java 程式碼如下:

public int lengthLongestPath(String input) {
    String[] paths = input.split("\n");
    int[] stack = new int[paths.length+1];
    int maxLen = 0;
    for(String s:paths){
        int lev = s.lastIndexOf("\t")+1, curLen = stack[lev+1] = stack[lev]+s.length()-lev+1;
        if(s.contains(".")) maxLen = Math.max(maxLen, curLen-1);
    }
    return maxLen;
}

results matching ""

    No results matching ""