最长的文件路径 Longest Absolute File Path

2018-07-30 22:05:52

问题描述:

问题求解:

本题个人感觉还是挺有意思的,题目要求的是最长的文件路径,其实是需要keep tracking路径长度,如果出现文件则需要进行比较,看是否为当前的最大长度。

难点就在于如何keep tracking,不妨将文件的路径旋转90度,那么就可以看到很明显的层次结构,我们可以使用一个栈来维护不同层次的信息,想到这里本题其实基本已经解决了一大半,剩下的就是层次关系的判断,显然和\t有关,那么对这个再进行分析,就很快可以得到解。

这里需要注意的是\t是算作一个字符的,并非两个字符。

    public int lengthLongestPath(String input) {
        int res = 0;
        String[] layers = input.split("\n");
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        for (String layer : layers) {
            int numOfTab = layer.lastIndexOf("\t") + 1;
            int level = numOfTab + 1;
            while (level < stack.size()) stack.pop();
            int curLen = stack.peek() + layer.length() - numOfTab + 1;
            stack.push(curLen);
            if (layer.contains(".")) res = Math.max(res, curLen - 1);
        }
        return res;
    }

 

posted @ 2018-07-30 22:20  hyserendipity  阅读(341)  评论(0编辑  收藏  举报