zoukankan      html  css  js  c++  java
  • 388. Longest Absolute File Path

    package LeetCode_388
    
    import java.util.*
    /**
     * 388. Longest Absolute File Path
     * https://leetcode.com/problems/longest-absolute-file-path/description/
     *
     * We will represent the file system as a string where "
    	" mean a subdirectory of the main directory,
     * "
    		" means a subdirectory of the subdirectory of the main directory and so on.
     * Each folder will be represented as a string of letters and/or digits.
     * Each file will be in the form "s1.s2" where s1 and s2 are strings of letters and/or digits.
    For example,
    the file system above is represented as "dir
    	subdir1
    		file1.ext
    		subsubdir1
    	subdir2
    		subsubdir2
    			file2.ext".
    Given a string input representing the file system in the explained format,
    return the length of the longest absolute path to a file in the abstracted file system.
    If there is no file in the system, return 0.
    
    Constraints:
    1. 1 <= input.length <= 104
    2. input may contain lower-case or upper-case English letters, a new line character '
    ',
    a tab character '	', a dot '.', a space ' ' or digits.
     * */
    class Solution {
        /*
        * solution: Stack, save all the length of candidate in stack, Time complexity:O(n), Space complexity:O(n)
        * */
        fun lengthLongestPath(input: String): Int {
            var result = 0
            //save all the length
            val stack = Stack<Int>()
            val stringList = input.split("
    ")
            for (path in stringList) {
                //last index of 	 is current line's level
                val level = path.lastIndexOf("	") + 1
                //try to find its parent, when stack size == level, the pop one is parent
                while (stack.size > level) {
                    stack.pop()
                }
                val parent = if (stack.isEmpty()) 0 else stack.peek() + 1
                //push a new candidate
                val newLen = parent + path.length - level
                stack.push(newLen)
                //if is file
                if (path.contains(".")) {
                    result = Math.max(result, newLen)
                }
            }
            return result
        }
    
    }
  • 相关阅读:
    执行一个外部程序并等待他的结束
    打开WORD文档时提示“word无法启动转换器mswrd632 wpc”的解决方法
    WaitForSingleObject的用法
    Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
    webservices传base64字串
    webservices传文件
    webservices 字节数组 Base64编码
    内存映射大文件
    文件分割合并
    move
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13766769.html
Copyright © 2011-2022 走看看