前言
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
LeetCode 算法到目前我们已经更新了 70 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
难度水平:中等
1. 描述
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
- 始终以斜杠 '/'开头。
- 两个目录名之间必须只有一个斜杠 '/'。
- 最后一个目录名(如果存在)不能 以 '/'结尾。
- 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.'或'..')。
返回简化后得到的 规范路径 。
2. 示例
示例 1
| 1 | 输入:path = "/home/" | 
示例 2
| 1 | 输入:path = "/../" | 
示例 3
| 1 | 输入:path = "/home//foo/" | 
示例 4
| 1 | 输入:path = "/a/./b/../../c/" | 
约束条件:
- 1 <= path.length <= 3000
- path由英文字母,数字,- '.',- '/'或- '_'组成。
- path是一个有效的 Unix 风格绝对路径。
3. 答案
| 1 | class SimplifyPath { | 
- 主要思想:使用堆栈,正常 push, ..流行。
- 时间复杂度: O(n)
- 空间复杂度: O(n)
该算法题解的仓库:LeetCode-Swift
点击前往 LeetCode 练习
关于我们
我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。
后续还会翻译大量资料到我们公众号,有感兴趣的朋友,可以加入我们。
 
        