Skip to content

Commit f8406b0

Browse files
committed
Sync LeetCode submission Runtime - 18 ms (95.62%), Memory - 30.5 MB (77.26%)
1 parent d81692b commit f8406b0

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<p>Given a list of folders <code>folder</code>, return <em>the folders after removing all <strong>sub-folders</strong> in those folders</em>. You may return the answer in <strong>any order</strong>.</p>
2+
3+
<p>If a <code>folder[i]</code> is located within another <code>folder[j]</code>, it is called a <strong>sub-folder</strong> of it. A sub-folder of <code>folder[j]</code> must start with <code>folder[j]</code>, followed by a <code>&quot;/&quot;</code>. For example, <code>&quot;/a/b&quot;</code> is a sub-folder of <code>&quot;/a&quot;</code>, but <code>&quot;/b&quot;</code> is not a sub-folder of <code>&quot;/a/b/c&quot;</code>.</p>
4+
5+
<p>The format of a path is one or more concatenated strings of the form: <code>&#39;/&#39;</code> followed by one or more lowercase English letters.</p>
6+
7+
<ul>
8+
<li>For example, <code>&quot;/leetcode&quot;</code> and <code>&quot;/leetcode/problems&quot;</code> are valid paths while an empty string and <code>&quot;/&quot;</code> are not.</li>
9+
</ul>
10+
11+
<p>&nbsp;</p>
12+
<p><strong class="example">Example 1:</strong></p>
13+
14+
<pre>
15+
<strong>Input:</strong> folder = [&quot;/a&quot;,&quot;/a/b&quot;,&quot;/c/d&quot;,&quot;/c/d/e&quot;,&quot;/c/f&quot;]
16+
<strong>Output:</strong> [&quot;/a&quot;,&quot;/c/d&quot;,&quot;/c/f&quot;]
17+
<strong>Explanation:</strong> Folders &quot;/a/b&quot; is a subfolder of &quot;/a&quot; and &quot;/c/d/e&quot; is inside of folder &quot;/c/d&quot; in our filesystem.
18+
</pre>
19+
20+
<p><strong class="example">Example 2:</strong></p>
21+
22+
<pre>
23+
<strong>Input:</strong> folder = [&quot;/a&quot;,&quot;/a/b/c&quot;,&quot;/a/b/d&quot;]
24+
<strong>Output:</strong> [&quot;/a&quot;]
25+
<strong>Explanation:</strong> Folders &quot;/a/b/c&quot; and &quot;/a/b/d&quot; will be removed because they are subfolders of &quot;/a&quot;.
26+
</pre>
27+
28+
<p><strong class="example">Example 3:</strong></p>
29+
30+
<pre>
31+
<strong>Input:</strong> folder = [&quot;/a/b/c&quot;,&quot;/a/b/ca&quot;,&quot;/a/b/d&quot;]
32+
<strong>Output:</strong> [&quot;/a/b/c&quot;,&quot;/a/b/ca&quot;,&quot;/a/b/d&quot;]
33+
</pre>
34+
35+
<p>&nbsp;</p>
36+
<p><strong>Constraints:</strong></p>
37+
38+
<ul>
39+
<li><code>1 &lt;= folder.length &lt;= 4 * 10<sup>4</sup></code></li>
40+
<li><code>2 &lt;= folder[i].length &lt;= 100</code></li>
41+
<li><code>folder[i]</code> contains only lowercase letters and <code>&#39;/&#39;</code>.</li>
42+
<li><code>folder[i]</code> always starts with the character <code>&#39;/&#39;</code>.</li>
43+
<li>Each folder name is <strong>unique</strong>.</li>
44+
</ul>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Approach 2: Using Sorting
2+
3+
# N = len(folder), L = max length of folder path
4+
# Time: O(N * L log N)
5+
# Space: O(N * L)
6+
7+
class Solution:
8+
def removeSubfolders(self, folder: List[str]) -> List[str]:
9+
folder.sort()
10+
11+
result = [folder[0]]
12+
13+
for i in range(1, len(folder)):
14+
last_folder = result[-1]
15+
last_folder += '/'
16+
17+
if not folder[i].startswith(last_folder):
18+
result.append(folder[i])
19+
20+
return result

0 commit comments

Comments
 (0)