Swift - 简化绝对路径

题目

给出一个文件的绝对路径,要求将其简化。举个例子,路径是“/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 - 简化绝对路径)