388.文件的最长绝对路径
388.文件的最长绝对路径
题解
题目:给你一个字符串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/subdir2/subsubdir2/file2.ext 返回32
思路:
1.同一深度的上一级目录名长度一样 2.记录上一级目录名,用map存 3.\t的个数就是深度 4.\t到\n之间就是目录或者文件名 5.遍历字符串,边遍历边存map
代码
func lengthLongestPath(input string) int { //route key->深度 val->目录的长度 route, n, ans := make(map[int]int), len(input), 0 for i := 0; i < n; i++ { isFile, depth, cnt := false, 0, 0 //检测当前名称的深度 for ; i < n && input[i] == '\t'; i++ { depth++ } //检测当前名称的长度 for ; i < n && input[i] != '\n'; i++ { if input[i] == '.' { isFile = true } cnt++ } //存储map route[depth] = cnt sum := 0 //如果是文件 if isFile { //统计绝对路径的长度 for j := 0; j <= depth; j++ { sum += route[j] } //sum+depth 加depth的原因是绝对路径:a/b.txt中的/ ans = max(ans, sum+depth) } } return ans } func max(i, j int) int { if i > j { return i } return j }