一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
LeetCode每日一题打卡专栏正式启动!不出意外将日更LeetCode的每日一题,敬请期待。
个人博客链接:bbstudy.net/ (等毕业论文做好后续会完善相关功能)
4.20:文件的最长绝对路径
LeetCode 388,点击题目即可跳转至LeetCode
题解:模拟
注意:题目给出的换行符和制表符,都只是字符,而不是由两个字符组成。
上述理解后,这题就不是很难了,对于每一个文件file:
- 要么是由上一层的文件夹所得到,此时路径长度为:文件名长度+上一层路径长度+1(表示/)
- 要么直接为根目录下的文件,此时路径长度直接为:文件名长度
判断当前遍历的为文件还是文件夹 ,于是只需要判断是否存在字符 即可。
又由于只需要计算文件的最长绝对路径,于是我们只需要存储每一层的绝对路径的长度,然后按照上述规则不断更新结结果即可。
具体见下方代码注释。
C++代码:
class Solution {
public:
int lengthLongestPath(string input) {
int n=input.length();
int ans=0;
int pos=0; //遍历字符串
int dep; //遍历文件的层数
vector<int> f(n+1); //记录每一层的路径长度
while(pos<n){
//当前层数
dep=1;
while(pos<n&&input[pos]=='\t'){
pos++;dep++;
}
//记录当前文件/文件夹的长度
int len=0;
bool flag=false; //判断是否为文件
while(pos<n&&input[pos]!='\n'){
if(input[pos]=='.') flag=true;
pos++;len++;
}
// 不是根目录
if(dep>1) len+=f[dep-1]+1;
if(flag){ //is file
ans=max(ans,len);
}else{ //is folder
f[dep]=len;
}
//跳过换行符
pos++;
}
return ans;
}
};