主要有幾個重點,
- lev 儲存的是有幾個 \t ,表示目前是在第幾層的資料夾中。
- curLen 最後之所以要 -lev+1 是因為要把檔案的路徑表示成一般人看的形式,所以要移掉\t的數量,再加上一個\所佔的數量。
- 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;
}