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;
}
}