算法---文件的最长绝对路径

这篇具有很好参考价值的文章主要介绍了算法---文件的最长绝对路径。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例:
算法---文件的最长绝对路径

这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。

在文本格式中,如下所示(⟶表示制表符):

dir
⟶ subdir1
⟶ ⟶ file1.ext
⟶ ⟶ subsubdir1
⟶ subdir2
⟶ ⟶ subsubdir2
⟶ ⟶ ⟶ file2.ext

如果是代码表示,上面的文件系统可以写为 “dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext” 。‘\n’ 和 ‘\t’ 分别是换行符和制表符。

文件系统中的每个文件和文件夹都有一个唯一的 绝对路径 ,即必须打开才能到达文件/目录所在位置的目录顺序,所有路径用 ‘/’ 连接。上面例子中,指向 file2.ext 的 绝对路径 是 “dir/subdir2/subsubdir2/file2.ext” 。每个目录名由字母、数字和/或空格组成,每个文件名遵循 name.extension 的格式,其中 name 和 extension由字母、数字和/或空格组成。

给定一个以上述格式表示文件系统的字符串 input ,返回文件系统中 指向 文件 的 最长绝对路径 的长度 。 如果系统中没有文件,返回 0。

示例 1:

算法---文件的最长绝对路径

输入:input = “dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext”
输出:20
解释:只有一个文件,绝对路径为 “dir/subdir2/file.ext” ,路径长度 20
示例 2:
算法---文件的最长绝对路径

输入:input = “dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext”
输出:32
解释:存在两个文件:
“dir/subdir1/file1.ext” ,路径长度 21
“dir/subdir2/subsubdir2/file2.ext” ,路径长度 32
返回 32 ,因为这是最长的路径
示例 3:

输入:input = “a”
输出:0
解释:不存在任何文件
示例 4:

输入:input = “file1.txt\nfile2.txt\nlongfile.txt”
输出:12
解释:根目录下有 3 个文件。
因为根目录中任何东西的绝对路径只是名称本身,所以答案是 “longfile.txt” ,路径长度为 12

提示:

1 <= input.length <= 104
input 可能包含小写或大写的英文字母,一个换行符 ‘\n’,一个制表符 ‘\t’,一个点 ‘.’,一个空格 ’ ',和数字。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-absolute-file-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决思路

因为是一层一层遍历
所以后面的第n层可以覆盖前面的第n层
而且用不到DFS 不要被题目误导

解决方法

    fun lengthLongestPath(input: String): Int {
        var max = 0
        if (!input.contains(".")) {
            return 0
        }
        var map = HashMap<Int, Int>()

        val split = input.split("\n")
        split.forEach {
            val level = getLevel(it)
            val parentLength = map[level - 1] ?: 0

            if (it.contains(".")){
                //file
                max = max.coerceAtLeast(parentLength + it.length - level)
            }else{
                //dir
                map[level] = parentLength + it.length - level + 1
            }
        }
        return max
    }

    private fun getLevel(str: String): Int {
        var level = 0
        for (i in str.indices){
            if ('\t' == str[i]) {
                level++
            }else{
                break
            }
        }
        return level
    }

总结

1.懒惰是成功的最大阻碍,每次都不想写算法才是最真实的写照
但是要鼓励和推动自己去写去思考
2.想了很久才想出来思路,虽慢但是有结果就行
3.这里注意split 要用\n,而不是\n
4.\t是一个字符,一个char类型 而不是两个。需要注意

算法---文件的最长绝对路径文章来源地址https://www.toymoban.com/news/detail-420493.html

到了这里,关于算法---文件的最长绝对路径的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python:pycharm中读取文件的相对路径和绝对路径

    要读取如图所示文件的相对路径: 方法1:直接根据文件路径手动读取 D:PycharmProjectspythonProjecttorch_learningtest_path.py 方法2:os.path.abspath(path)获取 比如我想从左图文件”test_path“访问右图\\\"0013035.jpg\\\"文件,采用相对路径: 1.获取当前文件的绝对路径:D:PycharmProjectspythonProjectt

    2024年02月06日
    浏览(35)
  • 微信小程序配置绝对路径引入文件

    微信小程序默认使用相对路径引入文件 在多层文件夹时需要很长前缀 const { ClueApi } = require(\\\'../../../../utils/api.js\\\') 配置方法 在app.json里面配置  \\\"resolveAlias\\\": {     \\\"@/*\\\": \\\"/*\\\"   } 在页面使用  const { ClueApi } = require(\\\"@/utils/api\\\");

    2024年02月12日
    浏览(34)
  • 面试算法112:最长递增路径

    输入一个整数矩阵,请求最长递增路径的长度。矩阵中的路径沿着上、下、左、右4个方向前行。例如,图中矩阵的最长递增路径的长度为4,其中一条最长的递增路径为3→4→5→8,如阴影部分所示。 由于需要搜索图中的所有节点才能确定最长递增路径的长度,因此这也是一个

    2024年01月23日
    浏览(25)
  • 路径的写法 绝对路径的含义: 相对路径与路径跳转 相对路径的跨文件跳转、返回跳转 跨文件跳转

    提示:以下是本篇文章正文内容,下面案例可供参考 站内资源和站外资源 站内资源:当前网站的资源 站外资源:非当前网站的资源 绝时路径和相对路径 站外资源:绝对路径 绝对路径是完整的网站链接 站内资源:相对路径 绝对路径的含义: url地址: 协议名://主机名:端口号/路径

    2024年02月01日
    浏览(53)
  • 解决vue3前端获取文件的绝对路径问题

    公司的项目是基于vue3的,由于需求需要前端获取用户选的文件的绝对路径。但是浏览器处于安全策略无法获取真实的文件路径,只能拿到相对路径或者是D:fakepathxxxx. 看了网上很多方法都很坑,明明没拿到路径非说拿到了,浪费了很多时间,这里要说单纯依靠vue是解决不了的

    2024年02月09日
    浏览(33)
  • 算法 矩阵最长递增路径-(递归回溯+动态规划)

    牛客网: BM61 求矩阵的最长递增路径 解题思路: 1. 遍历二维矩阵每个位置,max求出所有位置分别为终点时的最长路径 2. 求某个位置为终点的最长路径时,使用动态规划dp对已经计算出的位置进行记录 3. 处理某个位置的最长路径时,如果dp[i][j]位置已有值,则直接返回即可,否则

    2024年02月07日
    浏览(34)
  • 8.11:如何在Python中获取文件的绝对路径?

    在当今信息化的时代,计算机科学已经成为了必备的技能之一。而Python作为一种简单易学且功能强大的编程语言,受到了越来越多的关注和应用。在Python编程中,获取文件的绝对路径是一项必备技能,因为它对于文件的读写、处理和管理都非常重要。 通过学习如何获取文件的

    2024年02月11日
    浏览(29)
  • C++---树形DP---树的最长路径(每日一道算法2023.5.4)

    注意事项: 本题为\\\"树与图的DFS深度优先遍历—树的重心\\\"的近似题,同时涉及到 单链表模拟邻接表存储图 的操作,建议先理解那篇文章。 题目: 给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。 现在请你找到树中的一条最长路径。 换句话

    2024年02月02日
    浏览(26)
  • Spring Boot学习随笔- @SpringBootApplication详解、加载绝对路径配置文件、工厂创建对象(@ConfigurationProperties、@Value)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 这是一个 组合注解 ,就是由多个注解组成。下列注解红框内称为 元注解 (jdk提供) @Target :指定注解作用范围 @Retention :指定注解什么时候生效 重要注解 @SpringBootConfiguration:自动配置Spring、SpringMVC相关环境 @EnableAutoCo

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包