388. Longest Absolute File Path
Suppose we have the file system represented in the following picture:

We will represent the file system as a string where "\n\t" mean a subdirectory of the main directory, "\n\t\t" means a subdirectory of the subdirectory of the main directory and so on. Each folder will be represented as a string of letters and/or digits. Each file will be in the form "s1.s2" where s1 and s2 are strings of letters and/or digits.
For example, the file system above is represented as "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext".
Given a string input representing the file system in the explained format, return the length of the longest absolute path to a file in the abstracted file system. If there is no file in the system, return 0.
Example 1:

Input: input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" Output: 20 Explanation: We have only one file and its path is "dir/subdir2/file.ext" of length 20. The path "dir/subdir1" doesn't contain any files.
Example 2:

Input: input = "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" Output: 32 Explanation: We have two files: "dir/subdir1/file1.ext" of length 21 "dir/subdir2/subsubdir2/file2.ext" of length 32. We return 32 since it is the longest path.
Example 3:
Input: input = "a" Output: 0 Explanation: We don't have any files.
Constraints:
1 <= input.length <= 104inputmay contain lower-case or upper-case English letters, a new line character'\n', a tab character'\t', a dot'.', a space' 'or digits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Solution { public int lengthLongestPath(String input) { Deque<Integer> stack = new ArrayDeque<>(); stack.push(0); // "dummy" length int maxLen = 0; for(String s:input.split("\n")){ int lev = s.lastIndexOf("\t")+1; // number of "\t" while(lev+1<stack.size()) stack.pop(); // find parent int len = stack.peek()+s.length()-lev+1; // remove "/t", add"/" stack.push(len); // check if it is file if(s.contains(".")) maxLen = Math.max(maxLen, len-1); } return maxLen; } } |
No comments:
Post a Comment