4.20每日一题388. 文件的最长绝对路径

在这里插入图片描述在这里插入图片描述用栈保存每一层路径,遇到文件就比较当前路径长度和保存的最长路径长度。根据\t的个数判断路径层数,当前路径小于上一层路径就退一定次数的栈,使栈内路径和当前路径保持一致。

class Solution {
public:
    int lengthLongestPath(string input) {
        int ans = 0;
        int maxlen = 0;
        string tmp = "";
        stack<string> path;
        int nowfloor = 0;
        int nextfloor = 0;
        int flag = 0;
        for(int i = 0; i < input.length(); i ++){
            if(input[i] == '.')
                flag = 1;
            if(input[i] == '\n' || i == input.length() - 1){
                if(i == input.length() - 1)
                tmp += input[i];
                path.push(tmp);
                ans += (tmp.length() + 1);
                if(ans > maxlen && flag){
                    maxlen = ans;
                }
                    
                while(input[++ i] == '\t')
                    nextfloor ++;
                if(nextfloor <= nowfloor){
                    int df = nowfloor - nextfloor + 1;
                    while(df --){
                        string tp = path.top();
                        path.pop();
                        ans -= (tp.length() + 1);
                    }
                }
                tmp = "";
                nowfloor = nextfloor;
                nextfloor = 0;
                flag = 0;
            }
            tmp += input[i];
        }
        return maxlen - 1 >= 0 ? maxlen - 1 : 0;
    }
};

用一个flag记录当前字符串是不是文件(有没有‘.’)
一开始遇到了个问题

if(ans > maxlen && flag){
					flag = 0;
                    maxlen = ans;
                }

把对flag的修改放到了能够比较这里,但实际上每换一次目录就要修改为0;
因为有可能某个文件导致flag改为了1但是长度比已经记录下的最大值小,所以flag就会一直保持1,然后遇到不是文件的目录也会计算长度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值