Hello 👋,
I’ve started doing some LeetCode dailies with Paula and I’d like to share our solutions for the last two problems.
https://leetcode.com/problems/removing-stars-from-a-string/
https://leetcode.com/problems/simplify-path/
I also want to warmly welcome the new nuculabs.dev subscribers! Thank you for subscribing!
If you want to attempt the problems by yourself then stop reading otherwise you’ll be spoiled with solutions.
Removing Stars From a String
In this problem you are given a string with stars ‘*’ and when you encounter a start you’ll need to remove the start along with the character to it’s left.
The full problem statement can be found here: removing-stars-from-a-string.
The solution involves using a simple stack:
class Solution:
def removeStars(self, s: str) -> str:
list_s = []
for i, char in enumerate(s):
if char == "*":
list_s.pop()
else:
list_s.append(char)
return "".join(list_s)
Simplify Path
In this problem you are given a unix path and you need to simplify it, for example the path “/a//b////c/d//././/..” will be simplified to “/a/b/c”.
The solution involves using a simple stack:
class Solution:
def remove_duplicated_slashes(self, path: str):
clean_path = []
last_char = None
for s in path:
if s == "/" and last_char == "/":
continue
clean_path.append(s)
last_char = s
return "".join(clean_path)
def simplifyPath(self, path: str) -> str:
# remove duplicate slashes
simplified_path = []
clean_path = self.remove_duplicated_slashes(path)
parts = clean_path.split("/")
for part in parts:
if part == "." or part == "":
continue
elif part == "..":
if len(simplified_path) > 0:
simplified_path.pop()
else:
simplified_path.append(part)
return "/" + "/".join(simplified_path)
Paula’s solution is simpler and a cleaner in my opinion:
class Solution:
def simplifyPath(self, path: str) -> str:
dirs = path.split('/')
dirs = [dir for dir in dirs if len(dir) > 0]
stack = []
for dir in dirs:
if dir == '.':
continue
else:
if dir != '..':
stack.append(dir)
else:
if len(stack) == 0:
stack.append('/')
stack.pop()
# print(stack[::-1])
return '/'+"/".join(stack)
Thanks for reading! 🍻