388. Longest Absolute File Path

Google OA题目,为什么G家从OA开始就这么变态?一个值得思索的问题。

有些麻烦的纯模拟。

  • 首先,用split('\n')将原串分隔开,相当于按行读。

  • 利用\t的个数来确定当前的目录/文件在第几层

  • 从上到下一行行读入,像dfs的顺序,所以可以把前面几层的字符串长度都记下来。

  • 用一个数组记录每一层的长度,每次遇到了文件(而不是文件夹),会出现一个点'.',我们就把前面的长度都加起来,相当于维护了一个前缀和

  • 我们求的是最长的那个长度,所以用max记一个最大的就可以了

我写的是九章的做法,当年做这道OA的时候代码非常的长,九章的解法就很简洁了。

public class Solution {
    public int lengthLongestPath(String input) {
        int max = 0;
        int[] path = new int[input.length() + 2];
        String[] st = input.split("\n");
        for (String line : st) {
            String name = line.replaceAll("(\t)+", "");
            int depth = line.length() - name.length();
            if (name.contains(".")) {
                max = Math.max(max, path[depth] + name.length());
            } else {
                path[depth + 1] = path[depth] + name.length() + 1;
            }
        }
        return max;
    }
}

results matching ""

    No results matching ""