Alien Dictionary

Problem Link: https://practice.geeksforgeeks.org/problems/alien-dictionary/1

from collections import defaultdict
class Solution:
    def findOrder(self,dict, n, k):
        # code here
        
        # Create adjacency matrix 
        adj=defaultdict(list)
        for i in range(n-1):
            s1=dict[i]
            s2=dict[i+1]
            l=min(len(s1),len(s2))
            for j in range(l):
                if(s1[j]!=s2[j]):
                    adj[ord(s1[j])-ord('a')].append(ord(s2[j])-ord('a'))
                    break

        indegree=[0 for i in range(k)]
        for i in adj:
            for j in adj[i]:
                indegree[j]+=1
        
        q=[]
        for i in range(k):
            if(indegree[i]==0):
                q.insert(0,i)
        
        ans=[]
        while(q):
            for _ in range(len(q)):
                
                node=q.pop()
                ans.append(node)
                for i in adj[node]:
                    indegree[i]-=1
                    if(indegree[i]==0):
                        q.insert(0,i)
        
        s=""
        for i in ans:
            s=s+chr(i+ord('a'))
        
        return s

Last updated