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
}
}