rustgym/leetcode/
_388_longest_absolute_file_path.rs1struct Solution;
2
3struct Folder {
4 level: usize,
5 length: usize,
6}
7
8impl Solution {
9 fn length_longest_path(input: String) -> i32 {
10 let mut stack: Vec<Folder> = vec![];
11 let mut folder_length = 0;
12 let mut max = 0;
13 for line in input.split('\n') {
14 let s = line.chars();
15 let mut level: usize = 0;
16 let mut is_folder = true;
17 for c in s {
18 match c {
19 '\t' => {
20 level += 1;
21 }
22 '.' => {
23 is_folder = false;
24 break;
25 }
26 _ => {}
27 }
28 }
29 let name = line[level..].to_string();
30 while let Some(top) = stack.pop() {
31 if top.level >= level {
32 folder_length -= top.length;
33 } else {
34 stack.push(top);
35 break;
36 }
37 }
38 if is_folder {
39 let length = name.len() + 1;
40 let folder = Folder { level, length };
41 stack.push(folder);
42 folder_length += length;
43 } else {
44 max = max.max(name.len() + folder_length);
45 }
46 }
47 max as i32
48 }
49}
50
51#[test]
52fn test() {
53 let input =
54 "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
55 .to_string();
56 let res = 32;
57 assert_eq!(Solution::length_longest_path(input), res);
58}