Skip to content

Commit 4420f6f

Browse files
committed
✨feat: Add 71
1 parent c2e728f commit 4420f6f

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

Index/栈.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
| ------------------------------------------------------------ | ------------------------------------------------------------ | ---- | -------- |
33
| [20. 有效的括号](https://leetcode-cn.com/problems/valid-parentheses/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/valid-parentheses/solution/shua-chuan-lc-zhan-ascii-chai-zhi-jie-fa-00zo/) | 简单 | 🤩🤩🤩🤩🤩 |
44
| [32. 最长有效括号](https://leetcode-cn.com/problems/longest-valid-parentheses/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/longest-valid-parentheses/solution/shua-chuan-lc-miao-dong-xi-lie-shi-yong-95ezk/) | 困难 | 🤩🤩🤩🤩 |
5+
| [71. 简化路径](https://leetcode-cn.com/problems/simplify-path/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/simplify-path/solution/gong-shui-san-xie-jian-dan-zi-fu-chuan-m-w7xi/) | 中等 | 🤩🤩🤩🤩 |
56
| [155. 最小栈](https://leetcode-cn.com/problems/min-stack/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/min-stack/solution/tu-li-zhan-shi-shuang-zhan-shi-xian-zui-fcwj5/) | 简单 | 🤩🤩🤩🤩🤩 |
67
| [232. 用栈实现队列](https://leetcode-cn.com/problems/implement-queue-using-stacks/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/implement-queue-using-stacks/solution/sha-shi-jun-tan-fu-za-du-ya-wo-de-suan-f-gb6d/) | 简单 | 🤩🤩🤩🤩🤩 |
78
| [341. 扁平化嵌套列表迭代器](https://leetcode-cn.com/problems/flatten-nested-list-iterator/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/flatten-nested-list-iterator/solution/yi-ti-shuang-jie-dfsdui-lie-di-gui-zhan-kvwhy/) | 中等 | 🤩🤩🤩 |

Index/模拟.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
| [65. 有效数字](https://leetcode-cn.com/problems/valid-number/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/valid-number/solution/gong-shui-san-xie-zi-fu-chuan-mo-ni-by-a-7cgc/) | 困难 | 🤩🤩🤩 |
1818
| [66. 加一](https://leetcode-cn.com/problems/plus-one/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/plus-one/solution/gong-shui-san-xie-jian-dan-mo-ni-ti-by-a-5av1/) | 简单 | 🤩🤩🤩🤩 |
1919
| [68. 文本左右对齐](https://leetcode-cn.com/problems/text-justification/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/text-justification/solution/gong-shui-san-xie-zi-fu-chuan-mo-ni-by-a-s3v7/) | 困难 | 🤩🤩🤩 |
20+
| [71. 简化路径](https://leetcode-cn.com/problems/simplify-path/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/simplify-path/solution/gong-shui-san-xie-jian-dan-zi-fu-chuan-m-w7xi/) | 中等 | 🤩🤩🤩🤩 |
2021
| [73. 矩阵置零](https://leetcode-cn.com/problems/set-matrix-zeroes/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/set-matrix-zeroes/solution/xiang-jie-fen-san-bu-de-o1-kong-jian-jie-dbxd/) | 中等 | 🤩🤩🤩🤩 |
2122
| [165. 比较版本号](https://leetcode-cn.com/problems/compare-version-numbers/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/compare-version-numbers/solution/gong-shui-san-xie-jian-dan-zi-fu-chuan-m-xsod/) | 中等 | 🤩🤩🤩🤩 |
2223
| [166. 分数到小数](https://leetcode-cn.com/problems/fraction-to-recurring-decimal/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/fraction-to-recurring-decimal/solution/gong-shui-san-xie-mo-ni-shu-shi-ji-suan-kq8c4/) | 中等 | 🤩🤩🤩🤩 |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
### 题目描述
2+
3+
这是 LeetCode 上的 **[71. 简化路径](https://leetcode-cn.com/problems/simplify-path/solution/gong-shui-san-xie-jian-dan-zi-fu-chuan-m-w7xi/)** ,难度为 **中等**
4+
5+
Tag : 「模拟」、「栈」
6+
7+
8+
9+
给你一个字符串 `path`,表示指向某一文件或目录的 `Unix` 风格 绝对路径 (以 `'/'` 开头),请你将其转化为更加简洁的规范路径。
10+
11+
`Unix` 风格的文件系统中,一个点(`.`)表示当前目录本身;此外,两个点 (`..`) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,`'//'`)都被视为单个斜杠 `'/'` 。 对于此问题,任何其他格式的点(例如,`'...'`)均被视为文件`/`目录名称。
12+
13+
请注意,返回的 规范路径 必须遵循下述格式:
14+
15+
* 始终以斜杠 `'/'` 开头。
16+
* 两个目录名之间必须只有一个斜杠 `'/'`
17+
* 最后一个目录名(如果存在)不能 以 `'/'` 结尾。
18+
* 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '`.'``'..'`)。
19+
20+
返回简化后得到的 **规范路径**
21+
22+
示例 1:
23+
```
24+
输入:path = "/home/"
25+
26+
输出:"/home"
27+
28+
解释:注意,最后一个目录名后面没有斜杠。
29+
```
30+
示例 2:
31+
```
32+
输入:path = "/../"
33+
34+
输出:"/"
35+
36+
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。
37+
```
38+
示例 3:
39+
```
40+
输入:path = "/home//foo/"
41+
42+
输出:"/home/foo"
43+
44+
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
45+
```
46+
示例 4:
47+
```
48+
输入:path = "/a/./b/../../c/"
49+
50+
输出:"/c"
51+
```
52+
53+
提示:
54+
* $1 <= path.length <= 3000$
55+
* `path` 由英文字母,数字,`'.'``'/'``'_'` 组成。
56+
* `path` 是一个有效的 `Unix` 风格绝对路径。
57+
58+
---
59+
60+
### 模拟
61+
62+
根据题意,使用栈进行模拟即可。
63+
64+
具体的,从前往后处理 `path`,每次以 `item` 为单位进行处理(有效的文件名),根据 `item` 为何值进行分情况讨论:
65+
66+
* `item` 为有效值 :存入栈中;
67+
* `item``..` :弹出栈顶元素(若存在);
68+
* `item``.` :不作处理。
69+
70+
代码:
71+
```Java
72+
class Solution {
73+
public String simplifyPath(String path) {
74+
Deque<String> d = new ArrayDeque<>();
75+
int n = path.length();
76+
for (int i = 1; i < n; ) {
77+
if (path.charAt(i) == '/' && ++i >= 0) continue;
78+
int j = i + 1;
79+
while (j < n && path.charAt(j) != '/') j++;
80+
String item = path.substring(i, j);
81+
if (item.equals("..")) {
82+
if (!d.isEmpty()) d.pollLast();
83+
} else if (!item.equals(".")) {
84+
d.addLast(item);
85+
}
86+
i = j;
87+
}
88+
StringBuilder sb = new StringBuilder();
89+
while (!d.isEmpty()) sb.append("/" + d.pollFirst());
90+
return sb.length() == 0 ? "/" : sb.toString();
91+
}
92+
}
93+
```
94+
* 时间复杂度:$O(n)$
95+
* 空间复杂度:$O(n)$
96+
97+
---
98+
99+
### 最后
100+
101+
这是我们「刷穿 LeetCode」系列文章的第 `No.71` 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
102+
103+
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
104+
105+
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode
106+
107+
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
108+

0 commit comments

Comments
 (0)