题目描述:
思路:要找到最长路径的字符个数,需要逐层计算,记录最长的长度即可。
首先根据换行符将字符串拆成一个个的片段,存起来分别判断,在拆分的过程中直接去掉换行符。
层数的判断可以根据每个字符片段开始的‘\t’个数。
如果当前片段没有字符‘.’,当前表示一个文件夹,用一个数组存起来当前的长度。
否则,当前片段表示一个文件,从第一层开始累加长度,加到当前层,再加上层数(层数从0开始,刚好是和需要加上的分隔符个数相同),统计最大的字符数。
代码:
int lengthLongestPath(string& input){
int inputLen = input.length();
vector<string> parts;
int index = 0;
string tmp = "";
while(index < inputLen){
if(input[index] == '\n'){ //先分割字符串,存在数组中
parts.push_back(tmp);
tmp = "";
}
else{
tmp += input[index];
}
++index;
}
parts.push_back(tmp);
int res = 0; //记录最终结果
int level = 0; //当前判断的片段的层数
vector<int> depth(parts.size(),0);//下标表示层数,元素表示相应层数的字符个数,从第0层开始
for(int i=0; i<parts.size(); ++i){ //分别判断
int idx = 0;
level = 0;
string t = parts[i];
while(t[idx++] == '\t') //根据'\t'判断当前片段是第几层
++level;
string needProcess = t.substr(level); //去掉前面的\t
if(needProcess.find(".") == string::npos){ //是文件夹,直接更改当前level的长度
depth[level] = needProcess.length();
}
else{ //file
if(level == 0){ //直接就是文件,没有文件夹,就是最终结果
res = needProcess.length();
}
else{ //前面有文件夹,需要累加文件夹的长度
int tmp = 0;
for(int i=0; i<level; ++i)
tmp += depth[i];
tmp = tmp + level + needProcess.length(); //还要加上分隔符的个数
res = tmp > res? tmp: res; //res始终记录最大者
}
}
}
return res;
}