자바 구현 LeetCode 388 개 파일 긴 절대 경로

파일의 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;
    }
}
출시 1500 원저 · 원 찬양 20000 + · 전망 1,910,000 +

추천

출처blog.csdn.net/a1439775520/article/details/104817600