一起养成写作习惯!这是我参与「日新计划 4 月更文挑战」的第17天,点击查看活动详情。

前言

我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCoios应用商店de 算法到目前我们已经更新了 70 期,我们会保持更新时间和进度(周一、周三、周五面试早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提APP升。

不积跬步,无以至千里;不积小流,面试自我介绍一分钟无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留面试技巧和话术大全言,我们会尽力满足大家面试自我介绍3分钟通用的需求。

难度水平:中等

1. 描算法是指什么

给你一个字符path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身application;此外,两个点 (..字符串逆序输出 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/字符是什么' 。 对于此问题,任ios14.4.1更新了什么何其他格式的点(例如,'...')均被视为文件/apple目录名称。

请注意,返回的 规范路径application 必须遵循下述格式:

  • 始终以斜杠 '/' 开头。
  • 两个目录名之间必须只有一个斜杠 '/'
  • 最后一个目录名(如果存在)不能字符间距'/' 结尾。
  • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.'算法的特征 '..')。

返回简化后得到的 规范路径

2.ios14.4.1更新了什么 示例

示例 1

输入:path = "/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。 

示例 2ios系统

输入:path = "/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。

示例 3

输入:path = "/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

示例 4

输入:path = "/a/./b/../../c/"
输出:"/c"

约束条件:

  • 1 <= path.length <= 3000
  • path 由英文字母,数字,'字符常量.''/''_' 组成。
  • path 是一个有效的 Unix 风格绝对路径。

3. 答案

class SimplifyPath {
    func simplifyPath(_ path: String) -> String {
        var directories = [String]()
        let components = path.split(separator: "/")
        for component in components {
            switch component {
            case "": break // do nothing
            case ".": break // do nothing, pointing to the current directory
            case "..":
                directories.popLast() // if empty, does nothing
            default:
                directories.append(String(component))
            }
        }
        return "/" + String(directories.joined(separator: "/"))
    }
}
  • 主要思想:使用堆栈,正常 push, ..流行。
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

该算application法题解的仓库:LeetCode-Swift

点击面试技巧和话术大全前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维算法导论护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。