LeetCode: Eliminarea stelelor dintr-un șir & Simplificarea căii
- 1 minute de citit
- 3 exemple de cod în Python
Disponibil și în English
Pe această pagină
Salut 👋,
Am început să fac câteva probleme zilnice de LeetCode împreună cu Paula și aș vrea să vă împărtășesc soluțiile noastre pentru ultimele două probleme.
https://leetcode.com/problems/removing-stars-from-a-string/
https://leetcode.com/problems/simplify-path/
Vreau să urez și un călduros bun venit noilor abonați de pe nuculabs.dev! Mulțumesc că v-ați abonat!
Dacă vrei să încerci problemele singur, oprește-te din citit, altfel vei fi spoiler-uit de soluții.
Eliminarea stelelor dintr-un șir
În această problemă primești un șir cu stele ‘*’ și, când întâlnești o stea, trebuie să elimini steaua împreună cu caracterul din stânga ei.
Enunțul complet al problemei poate fi găsit aici: removing-stars-from-a-string.
Soluția folosește o stivă simplă:
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)Simplificarea căii
În această problemă primești o cale unix și trebuie să o simplifici, de exemplu calea “/a//b////c/d//././/..” va fi simplificată la “/a/b/c”.
Soluția folosește o stivă simplă:
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: # elimină slash-urile duplicate 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)Soluția Paulei este mai simplă și mai curată, după părerea mea:
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)Mulțumesc pentru lectură! 🍻