zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 388 文件的最长绝对路径

    388. 文件的最长绝对路径

    假设我们以下述方式将我们的文件系统抽象成一个字符串:

    字符串 “dir subdir1 subdir2 file.ext” 表示:

    dir
        subdir1
        subdir2
            file.ext
    

    目录 dir 包含一个空的子目录 subdir1 和一个包含一个文件 file.ext 的子目录 subdir2 。

    字符串 “dir subdir1 file1.ext subsubdir1 subdir2 subsubdir2 file2.ext” 表示:

    dir
        subdir1
            file1.ext
            subsubdir1
        subdir2
            subsubdir2
                file2.ext
    

    目录 dir 包含两个子目录 subdir1 和 subdir2。 subdir1 包含一个文件 file1.ext 和一个空的二级子目录 subsubdir1。subdir2 包含一个二级子目录 subsubdir2 ,其中包含一个文件 file2.ext。

    我们致力于寻找我们文件系统中文件的最长 (按字符的数量统计) 绝对路径。例如,在上述的第二个例子中,最长路径为 “dir/subdir2/subsubdir2/file2.ext”,其长度为 32 (不包含双引号)。

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

    说明:

    文件名至少存在一个 . 和一个扩展名。
    目录或者子目录的名字不能包含 .。
    要求时间复杂度为 O(n) ,其中 n 是输入字符串的大小。

    请注意,如果存在路径 aaaaaaaaaaaaaaaaaaaaa/sth.png 的话,那么 a/aa/aaa/file1.txt 就不是一个最长的路径。

    PS:
    “ 是一个字符”

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    class Solution {
      //bx
         public int lengthLongestPath(String input) {
            if (input.length() == 0) {
                return 0;
            }
            int res = 0;
            String[] dirs = input.split("
    ");
            int[] sum = new int[dirs.length+1];
            //StringBuilder sb = new StringBuilder();
    
            for (String s : dirs) {
                int level = s.lastIndexOf('	') + 2;
                //if (level == 2){
                    //sb.setLength(sum[1]);
                //}
                //sb.append(s.substring(s.lastIndexOf("	")+1));
                int len = s.length() - (level - 1);
                if (s.contains(".")) {
                    res = Math.max(res, sum[level - 1] + len);
                } else {
                    sum[level] = sum[level - 1] + len + 1;  //是目录,要+1,目录有个/的
                    //sb.append("\");
                }
    
            }
            //System.out.println(sb.toString());
            return res;
        }
    }
    
  • 相关阅读:
    解决Linux ssh登录马上退出问题
    FineReport实线java报表填报录入的效果图
    CCEditBox/CCEditBoxImplMac
    Android图片异步载入框架Android-Universal-Image-Loader
    HYAppFrame(WinForm框架源代码)安装部署指南
    ASP.NET Web Api 2 接口API文档美化之Swagger
    Android OTA在线升级一(架构分析)【转】
    Android进程间通信(IPC)机制Binder简要介绍和学习计划【转】
    Linux内核源码中的likely和unlikely释疑【转】
    Android蓝牙串口通讯【转】
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946524.html
Copyright © 2011-2022 走看看