1.给出一个文件的绝对路径,要求将其简化
例子:路径 /home/ 简化后为/home
路径是“/a/./b/…/…/c/”,简化后为“/c”
根据常识知道一下规则
- “.”代表当前路径。比如“/a/.”实际上就是“/a”,无论输入多少个“.”都返回当前目录
- “…”代表上一级目录。比如“a/b/…”实际上就是“/a”,也就是说先进入“a”目录,再进入其下的“b”目录,再返回“b”目录的上一层,也就是“a”目录
解题思路
1)首先输入一个String,代表路径,输出要求也是String,同样代表路径
func p_simplityPath(path: String) -> String {
//用数组来实现栈的功能
var pathStack = [String]()
//拆分原路径
let paths = path.components(separatedBy: "/")
for path in paths {
//对于.我们直接跳过
guard path != "." else {
continue
}
//对于..使用 pop 操作
if path == ".." {
if pathStack.count > 0 {
pathStack.removeLast()
}
//对于空数的特殊情况
}else if path != "" {
pathStack.append(path)
}
}
// 将栈中的内容转化为优化后的内容
let result = pathStack.reduce("") { (total, dir) in
return "\(total)/\(dir)"
}
// 空路径的结果是“/”
return result.isEmpty ? "/": result
}
测试:
@objc func simplityPath()
{
let result = self.p_simplityPath(path: "/a/./b/../../c/")
print("简化后的路径\(result)")
}