LeetCode 269 — Alien Dictionary

Sexto y último problema de Advanced Graphs — Hard. Combina construcción de grafo a partir de string comparison + topological sort.

Enunciado

Dada una lista de palabras de un alfabeto desconocido en orden lexicográfico, devuelve el orden de los caracteres en ese alfabeto. Si imposible, "".


Solución — Construir grafo + Kahn’s

from collections import defaultdict, deque
 
class Solution:
    def alienOrder(self, words):
        graph = defaultdict(set)
        in_degree = {c: 0 for word in words for c in word}
 
        for i in range(len(words) - 1):
            w1, w2 = words[i], words[i+1]
            min_len = min(len(w1), len(w2))
            if len(w1) > len(w2) and w1[:min_len] == w2[:min_len]:
                return ""                        # caso inválido: prefijo más largo antes
            for j in range(min_len):
                if w1[j] != w2[j]:
                    if w2[j] not in graph[w1[j]]:
                        graph[w1[j]].add(w2[j])
                        in_degree[w2[j]] += 1
                    break
 
        # Kahn's
        q = deque(c for c in in_degree if in_degree[c] == 0)
        result = []
        while q:
            c = q.popleft()
            result.append(c)
            for nb in graph[c]:
                in_degree[nb] -= 1
                if in_degree[nb] == 0:
                    q.append(nb)
 
        return ''.join(result) if len(result) == len(in_degree) else ""

Análisis: O(C) donde C = total de chars.


Cierre Advanced Graphs

#ProblemaAlgoritmo
11584-min-cost-to-connect-all-pointsPrim’s MST
2743-network-delay-timeDijkstra
3787-cheapest-flights-within-k-stopsBellman-Ford con K iteraciones
4332-reconstruct-itineraryHierholzer (Eulerian path)
5778-swim-in-rising-waterDijkstra min-max
6EsteTopological sort sobre grafo construido

Conexiones

Estado

  • Leído
  • Implementado desde cero
  • Resuelto en LeetCode
  • Patrón Advanced Graphs cerrado [OK]