一道文件路径读取的题,开始的时候想的是建立文件树,然后把N叉树变成二叉树存储,然后每次读到文件结点作比较记录。稍后尝试在这里发文件树版本的。
后来发现主要重点其实在于字符串分析,然后忽略了一点就是其实回溯很麻烦而且之前读过的兄弟节点没必要存,不如直接用数组记录每级长度,然后更新什么的,否则子节点还要有一个记录父节点的指针就很烦。
直接上标程:
int lengthLongestPath(string input) {
struct Nod
vector<int> level(200);
level[0]=0;
int maxi=0,ln=1,countx=0;
bool isFILE=false;
for(int i=0,fin=input.size();i<fin;++i){
while(input[i]=='\t'){ //读取分级
i++;ln++;
}
while(input[i]!='\n'&&i<fin){ //读取文件中间名字等
if(input[i]=='.')isFILE=true;
i++;countx++;
}
if(isFILE){ //处理文件
maxi=max(maxi,level[ln-1]+countx);
cout<<ln<<"th level file:"<<countx<<endl;
}
else{ //运用覆盖思路读取文件长度
level[ln]=level[ln-1]+countx+1;
cout<<ln<<"th level contains"<<countx<<endl;
}
countx=0;isFILE=false;ln=1;
}
return maxi;
}
顺便一说中间做了一件比较蠢的事情就是把'\n','\t'当作长度为2的字符事实上只占1位char。