#388. Longest Absolute File Path
解题思路
使用一个数组prefixSum,保存遍历过程中,已知层级的前缀字符串数。
如前缀为aaa/bb/cc/
则prefixSum = [0, 4, 7, 10], 即aaa/的长度,aaa/bb/的长度,aaa/bb/cc/的长度。
在遍历每行数据时:
保存当前行的层级level,也就是\t的数量。
- 如果当前行为文件: 我们只要将当前文件名的长度,加上之前层级的字符串长度就行。
- 如果当前行为文件夹: 如果层级比数组长度大,我们只需在数组后面追加一个新长度; 如果层级比数组长度小,我们只需更新相应的下标为新值就行了。
代码
class Solution:
def lengthLongestPath(self, input: str) -> int:
prefixSum = [0]
res = 0
for s in input.split('\n'):
level = 0 # 层级计数
while s[level] == '\t':
level += 1
slen = len(s) - level
if '.' in s: # 如果是文件,就比较结果
res = max(res, prefixSum[level] + slen)
continue
else: # 如果是文件夹,将当前层级的字符串数目(包含末尾斜杆)保存。
if level + 1 < len(prefixSum):
prefixSum[level+1] = prefixSum[level] + slen + 1
else:
prefixSum.append(prefixSum[-1] + slen + 1)
return res