2018-07-30 22:05:52
问题描述:
问题求解:
本题个人感觉还是挺有意思的,题目要求的是最长的文件路径,其实是需要keep tracking路径长度,如果出现文件则需要进行比较,看是否为当前的最大长度。
难点就在于如何keep tracking,不妨将文件的路径旋转90度,那么就可以看到很明显的层次结构,我们可以使用一个栈来维护不同层次的信息,想到这里本题其实基本已经解决了一大半,剩下的就是层次关系的判断,显然和 有关,那么对这个再进行分析,就很快可以得到解。
这里需要注意的是 是算作一个字符的,并非两个字符。
public int lengthLongestPath(String input) { int res = 0; String[] layers = input.split(" "); Stack<Integer> stack = new Stack<>(); stack.push(0); for (String layer : layers) { int numOfTab = layer.lastIndexOf(" ") + 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; }