public static int lengthLongestPath(String input) {
String[] dirs=input.split("\n");//分割
Deque<Integer> stk=new ArrayDeque<>();
int cur=0;//当前路径长度
int max=0;//最大路径长度
for (String dir : dirs) {
int layer=0;//有几个'\t'代表该目录在第几层
int i;
for (i = 0; dir.charAt(i)=='\t' ; i++) {
layer++;
}
int len=dir.substring(i).length();//该目录名称长度
//根据该目录所处层进行出栈,并更新cur
int n=stk.size();//表示当前在第n-1层
for (int j = 0; j < n-layer; j++) {
cur-=stk.pollLast()+1;
}
stk.offer(len);//添加该目录
cur+=len+1;
//遇到文件记录最大长度
if(dir.contains("."))
max=Math.max(max,cur);
}
if(max==0)//没有文件
return max;
return max-1;//第一个目录前没有'/'
}
|