lintcode643-Longest Absolute File Path

题目描述:

思路:要找到最长路径的字符个数,需要逐层计算,记录最长的长度即可。

         首先根据换行符将字符串拆成一个个的片段,存起来分别判断,在拆分的过程中直接去掉换行符。

         层数的判断可以根据每个字符片段开始的‘\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;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值