题目描述
思路
模拟
按换行符分割输入,根据该行的前缀tab数量确认该文件或目录属于哪一级,用哈希表记录之前遍历的长度,在遇到文件的’.'时统计答案即可
Python实现
class Solution:
def lengthLongestPath(self, input: str) -> int:
record, ans = defaultdict(int), 0
for line in input.split("\n"):
# level, line = more_itertools.ilen(takewhile(lambda x: x == '\t', line)), line.replace("\t","")
level, line = sum(1 for _ in takewhile(lambda x: x == '\t', line)), line.replace("\t","")
record[level] = len(line)
if '.' in line:
ans = max(ans, sum(record[i] for i in range(level + 1)) + level)
return ans
Java实现
class Solution {
public int lengthLongestPath(String input) {
Map<Integer, Integer> map = new HashMap<>();
int ans = 0, n = input.length();
for(int i = 0, cur = 0; i < n; i++) {
int level = 0;
while(i < n && input.charAt(i) == '\t') {
level++;
i++;
}
int len = 0;
boolean isFile = false;
while(i < n && input.charAt(i) != '\n') {
len++;
if(input.charAt(i++) == '.')
isFile = true;
}
map.put(level, len);
if(isFile) {
int sum = 0;
for(int j = 0; j <= level; j++)
sum += map.getOrDefault(j, 0);
ans = Math.max(ans, sum + level);
}
}
return ans;
}
}