Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8d9b4bc

Browse files
committed
solve 71.简化路径
1 parent 53f1134 commit 8d9b4bc

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

‎zh/71.简化路径.java‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
* @lc app=leetcode.cn id=71 lang=java
3+
*
4+
* [71] 简化路径
5+
*
6+
* https://leetcode-cn.com/problems/simplify-path/description/
7+
*
8+
* algorithms
9+
* Medium (39.45%)
10+
* Likes: 156
11+
* Dislikes: 0
12+
* Total Accepted: 43.9K
13+
* Total Submissions: 110.1K
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+
// @lc code=start
67+
class Solution {
68+
public String simplifyPath(String path) {
69+
String[] array = path.split("/");
70+
Stack<String> stack = new Stack<>();
71+
72+
for (String item : array) {
73+
if (!stack.isEmpty() && "..".equals(item)) {
74+
stack.pop();
75+
} else if (!"".equals(item) && !".".equals(item) && !"..".equals(item)) {
76+
stack.push(item);
77+
}
78+
}
79+
80+
if (stack.isEmpty()) {
81+
return "/";
82+
}
83+
84+
StringBuilder sb = new StringBuilder();
85+
for (String item : stack) {
86+
sb.append("/").append(item);
87+
}
88+
return sb.toString();
89+
}
90+
}
91+
// @lc code=end
92+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /