当前位置: 首页 > news >正文

30.哀家要长脑子了!---栈与队列

1.388. 文件的最长绝对路径 - 力扣(LeetCode)

其实看懂了就还好 

用一个栈来保存所遍历过最大的文件的绝对路径的长度,栈顶元素是文件的长度,栈中元素的个数是该文件目录的深度,非栈顶元素就是当时目录的长度

检查此时所所遍历的目录的深度,看有多少个 "\t",因为根目录是第一级,所以深度从1开始计算而不是从0开始计算

再来判断文件的长度,遇到 “\n”,就代表文件遍历完了,要换一层目录,遇到pos > n说明遍历完辣

然后检查一下之前有没有遍历过深度更大的文件,写的时候这里半天没搞懂,报一丝

具体用 st.size() 与 depth 之间的大小关系判断,如果st.size() >= depth 说明曾经遍历过深度更大的文件。

等一下,我又发现我理解错了,这个栈的作用不是我所理解的保存文件绝对路径的长度,他是用来帮助计算此时所遍历到的文件的长度,然后每次更新ans值记录最大的长度。

怎么正确计算呢,话接上文,曾经遍历过深度更大的目录或文件,说明此时所遍历的文件或者是此时所在的目录发生了路径跳转,不是那个深度更大的目录或是文件了,栈中包含的不必要的更深层的长度信息,但是我们要计算的是此时所在文件或是目录的路径长度。所以就回退,回退到上一级目录,也是它俩的共同父亲目录,去计算长度信息。

class Solution {
public:int lengthLongestPath(string input) {int n = input.size();int pos = 0, ans = 0;stack<int> st;while(pos < n){// 统计当前文件深度int depth = 1;while(pos < n && input[pos] == '\t'){depth++, pos++;}//统计文件夹的长度int len = 0;bool flag = false;while(pos < n && input[pos] != '\n'){if(input[pos] == '.'){flag = true;}pos++, len++;}//跳过换行符pos++;//计算长度if(st.size() >= depth){st.pop();}//加上前面的目录路径if(!st.empty()){len += st.top() + 1;}if(flag)ans = max(ans, len);st.emplace(len);}return ans;}
};

http://www.lryc.cn/news/355289.html

相关文章:

  • 多重继承引起的二义性问题和虚基类
  • ciscn
  • 智能的PHP开发工具PhpStorm v2024.1全新发布——支持PHPUnit 11.0
  • Vue2+Element 封装评论+表情功能
  • 【k8s】存储 pvc 参数列表
  • 数据集007:垃圾分类数据集(含数据集下载链接)
  • Spring常用注解(超全面)
  • HQL面试题练习 —— 合并活动日期
  • 基于SVm和随机森林算法模型的中国黄金价格预测分析与研究
  • Host头攻击-使用反向代理服务器或负载均衡器来传递路由信息
  • AWS容器之Amazon ECS
  • win10/win11 优先调用大核的电源计划性能设置
  • 模型实战(20)之 yolov8分类模型训练自己的数据集
  • 好消息!PMP纸质证书可以领取啦!(22年11月至23年8月)
  • select函数(Unix系统)
  • 设计模式16——策略模式
  • Putty: 随心御剑——远程启动服务工具plink
  • Vectorworks 2024 Mac安装包下载Vectorworks 2024安装教程3D建模设计工具
  • CSRF 攻击详解
  • 单链表OJ题(课堂总结)
  • cad角度如何精确到0.1
  • STM32H743+USBHID+CubeMX配置
  • 路由传参和获取参数的三种方式
  • 代码随想录算法训练营第四十一天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • HTML5表单控件:新时代的交互魔法手册
  • WordPress安装插件失败No working transports found
  • 多线程理论及操作
  • 本周 MoonBit 核心库进行 API 整理工作、工具链持续完善
  • Golang net/http标准库常用方法(三)
  • 24校招总结