美文网首页数据结构和算法
Swift - 简化绝对路径

Swift - 简化绝对路径

作者: Longshihua | 来源:发表于2018-12-17 09:57 被阅读0次

    题目

    给出一个文件的绝对路径,要求将其简化。举个例子,路径是“/home/”,简化后为“/home”,路径是“/a/./b/../../c/”,简化后为“/c”

    知识点

    • “.”代表当前路径。比如“/a/.”实际上就是“/a”,无论输入多少个“.”都返回当前目录
    • “..”代表上一级目录。比如“a/b/..”实际上就是“/a”,也就是说先进入“a”目录,再进入其下的“b”目录,再返回“b”目录的上一层,也就是“a”目录

    思路:

    1)首先输入一个String,代表路径,输出要求也是String,同样代表路径
    2)可以把输入的字符串根据“/”进行拆分,比如:“/a/b/./../d/”被拆分为一个String数组["a","b",".","..","d"]
    3)建立一个栈,然后遍历拆分后的String数组,对于一般的String,直接将其插入栈中,对于“..”进行pop操作,其它情况不做处理

    算法实现

    func simplifyPath(path: String) -> String {
            var pathStack = [String]() // 使用数组来实现栈的功能
            let paths = path.components(separatedBy: "/") // 拆分原路径
    
            for path in paths {
                guard path != "." else { // 对于.直接跳过
                    continue
                }
    
                if path == ".." { // 对于..执行pop操作
                    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
     }
    

    相关文章

      网友评论

        本文标题:Swift - 简化绝对路径

        本文链接:https://www.haomeiwen.com/subject/esyrgftx.html