Swift--栈和对列的实战面试题

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

结果

在这里插入图片描述

发布了128 篇原创文章 · 获赞 106 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Z1591090/article/details/102609035