• leetcode刷题笔记七十一题 简化路径


    leetcode刷题笔记七十一题 简化路径

    源地址:71. 简化路径

    问题描述:

    以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

    在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径

    请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

    示例 1:

    输入:"/home/"
    输出:"/home"
    解释:注意,最后一个目录名后面没有斜杠。
    示例 2:

    输入:"/../"
    输出:"/"
    解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
    示例 3:

    输入:"/home//foo/"
    输出:"/home/foo"
    解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
    示例 4:

    输入:"/a/./b/../../c/"
    输出:"/c"
    示例 5:

    输入:"/a/../../b/../c//.//"
    输出:"/c"
    示例 6:

    输入:"/a//b////c/d//././/.."
    输出:"/a/b/c"

    /**
    通过使用scala String类型方法split,将字符串中的“/”作为分隔符,将其中内容转化入数组arr
    由于arr(0)默认为“”,故从1 to arr.length-1进行遍历,其中数组中的内容可能为:
    1."." => 跳出当前循环
    2."" => 跳出当前循环
    3.".." => 检查ans的长度是否大于0 是则丢弃最后一个元素 否则跳出
    4.否则添加进入ans
    最后, 对ans首部添加"/"即可
    */
    import scala.collection.mutable
    import util.control.Breaks._
    object Solution {
        def simplifyPath(path: String): String = {
            val arr = path.split("/")
            val ans = mutable.ListBuffer[String]()
    
            for(i <- 1 to arr.length-1){
                breakable{
                    arr(i) match {
                        case "." => break()
                        case ".." => {if(ans.length == 0) break() else ans.remove(ans.length-1)}
                        case "" => break()
                        case _ => ans += arr(i) 
                    }
    
                }
            }
            val res = "/" + ans.mkString("/")
            return res
        }
    }
    
  • 相关阅读:
    十几个remote control software
    chromedriver bug
    跟我一起学ruby (转)
    ruby两套教程
    java把函数作为参数传递
    java如何在函数中调用主函数的数组
    Java HashSet和LinkedHashSet的用法
    java文件读写操作
    RAID详细介绍
    Apriori算法
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13337884.html
Copyright © 2020-2023  润新知