File tree Expand file tree Collapse file tree 1 file changed +97
-0
lines changed Expand file tree Collapse file tree 1 file changed +97
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ * @lc app=leetcode.cn id=71 lang=golang
3+ *
4+ * [71] 简化路径
5+ *
6+ * https://leetcode-cn.com/problems/simplify-path/description/
7+ *
8+ * algorithms
9+ * Medium (37.36%)
10+ * Likes: 78
11+ * Dislikes: 0
12+ * Total Accepted: 18.8K
13+ * Total Submissions: 49.6K
14+ * Testcase Example: '"/home/"'
15+ *
16+ * 以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
17+ *
18+ * 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)
19+ * 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
20+ *
21+ * 请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 /
22+ * 结尾。此外,规范路径必须是表示绝对路径的最短字符串。
23+ *
24+ *
25+ *
26+ * 示例 1:
27+ *
28+ * 输入:"/home/"
29+ * 输出:"/home"
30+ * 解释:注意,最后一个目录名后面没有斜杠。
31+ *
32+ *
33+ * 示例 2:
34+ *
35+ * 输入:"/../"
36+ * 输出:"/"
37+ * 解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
38+ *
39+ *
40+ * 示例 3:
41+ *
42+ * 输入:"/home//foo/"
43+ * 输出:"/home/foo"
44+ * 解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
45+ *
46+ *
47+ * 示例 4:
48+ *
49+ * 输入:"/a/./b/../../c/"
50+ * 输出:"/c"
51+ *
52+ *
53+ * 示例 5:
54+ *
55+ * 输入:"/a/../../b/../c//.//"
56+ * 输出:"/c"
57+ *
58+ *
59+ * 示例 6:
60+ *
61+ * 输入:"/a//b////c/d//././/.."
62+ * 输出:"/a/b/c"
63+ *
64+ */
65+
66+ import (
67+ "strings"
68+ )
69+
70+ // @lc code=start
71+ func simplifyPath (path string ) string {
72+ pa := strings .Split (path , "/" )
73+ ret := []string {pa [0 ]}
74+ for i := 1 ; i < len (pa ); i ++ {
75+ if pa [i ] == "" || pa [i ] == "." { // 跳过 /a//b = /a/b 跳过 /a/./b = /a/b
76+ continue
77+ }
78+ if pa [i ] == ".." { // 回退一个 /a/b/../c = /a/c
79+ if len (ret ) > 1 {
80+ ret = ret [0 : len (ret )- 1 ]
81+ }
82+ continue
83+ }
84+ ret = append (ret , pa [i ])
85+ }
86+ str := strings .Join (ret , "/" )
87+ if str == "" {
88+ return "/"
89+ }
90+ // 删掉最后一个/
91+ if str [len (str )- 1 ] == "/" [0 ] {
92+ str = str [0 : len (str )- 1 ]
93+ }
94+ return str
95+ }
96+ // @lc code=end
97+
You can’t perform that action at this time.
0 commit comments