파일의 388 가장 긴 절대 경로
우리는 문자열로 다음과 같은 방식으로 우리의 추상적 인 파일 시스템을 가정합니다 :
문자열 "DIR \ n \ tsubdir1 \ n \ tsubdir2 \ n \ t \ tfile.ext"대표 :
dir
subdir1
subdir2
file.ext
DIR 디렉토리가 비어있는 하위 디렉토리 하위 디렉토리 subdir2 디렉토리 subdir1하고있는 file.ext 파일의 포함이 포함되어 있습니다.
문자열 "DIR \ n \ tsubdir1 \ n \ t \ tfile1.ext \ n \ t \ tsubsubdir1 \ n \ tsubdir2 \ n \ t \ tsubsubdir2 \ n \ t \ t \ tfile2.ext"대표 :
dir
subdir1
file1.ext
subsubdir1
subdir2
subsubdir2
file2.ext
DIR 디렉토리는 두 개의 하위 디렉토리의 디렉토리 subdir1 및 subdir2이 포함되어 있습니다. 디렉토리 subdir1 file1.ext 파일은 차 공기와 하위 디렉토리 subsubdir1이 포함되어 있습니다. subdir2 하위 디렉토리는 파일 file2.ext을 포함하는 두 개의 subsubdir2가 포함되어 있습니다.
우리는 우리의 파일 시스템 파일을 찾고 절대 경로 (통계에 문자 수에 따라)에 최선을 다하고 있습니다. 예를 들면, 상기 두 번째 예에서, 가장 긴 경로 "DIR / subdir2 / subsubdir2 / file2.ext", 그 길이는 인용 부호없이 32이다.
위에 설명 된 형식의 파일 시스템을 나타내는 문자열을 감안할 때, 파일 시스템에있는 파일의 가장 긴 절대 경로의 길이를 반환합니다. 시스템은 0을 반환을 제기하지 않습니다.
설명 :
적어도 하나의 파일 이름을 입력합니다. 그리고 확장.
디렉토리 또는 하위 디렉토리 이름을 포함 할 수 없습니다 ..
소요 시간 복잡도는 O (N)이고, 여기서 n은 입력 스트링의 크기이다.
제발 참고 다음 경로 aaaaaaaaaaaaaaaaaaaaa / sth.png, A / AA / AAA /은 File2.txt 가장 긴 경로 중 하나가 아닌이있는 경우.
추신 :
"\ t는 문자입니다."
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Solution {
//bx
public int lengthLongestPath(String input) {
if (input.length() == 0) {
return 0;
}
int res = 0;
String[] dirs = input.split("\n");
int[] sum = new int[dirs.length+1];
//StringBuilder sb = new StringBuilder();
for (String s : dirs) {
int level = s.lastIndexOf('\t') + 2;
//if (level == 2){
//sb.setLength(sum[1]);
//}
//sb.append(s.substring(s.lastIndexOf("\t")+1));
int len = s.length() - (level - 1);
if (s.contains(".")) {
res = Math.max(res, sum[level - 1] + len);
} else {
sum[level] = sum[level - 1] + len + 1; //是目录,要+1,目录有个/的
//sb.append("\\");
}
}
//System.out.println(sb.toString());
return res;
}
}