전화번호부 구현

전화번호부 구현
GfG Practice에서 사용해 보세요. #practiceLinkDiv { 표시: 없음 !중요; }

전화번호부에 존재하는 연락처 목록이 제공됩니다. 작업은 전화번호부에 대한 검색 쿼리를 구현하는 것입니다. 문자열 '에 대한 검색어 str ’는 접두사가 ‘로 붙은 모든 연락처를 표시합니다. str '. 검색 기능의 특별한 속성 중 하나는 사용자가 연락처 목록에서 연락처를 검색할 때 사용자가 각 문자를 입력한 후 제안 사항(입력한 문자열로 접두사가 있는 연락처)이 표시된다는 것입니다.
메모: 목록의 연락처는 소문자 알파벳으로만 구성됩니다. 예:

Input : contacts [] = {gforgeeks  geeksquiz } Query String = gekk Output : Suggestions based on 'g' are geeksquiz gforgeeks Suggestions based on 'ge' are geeksquiz No Results Found for 'gek' No Results Found for 'gekk'  

권장 사항: 해결해 보세요. 관행 먼저 솔루션으로 넘어가기 전에

전화번호부는 다음을 사용하여 효율적으로 구현할 수 있습니다. 트라이 데이터 구조. 모든 연락처를 Trie에 삽입합니다. 일반적으로 Trie에 대한 검색 쿼리는 문자열이 trie에 존재하는지 여부를 확인하는 것이지만 이 경우 각 접두사 'str'이 있는 모든 문자열을 찾으라는 요청을 받습니다. 이는 다음을 수행하는 것과 동일합니다. 그래프의 DFS 순회 . Trie 노드에서 인접한 Trie 노드를 방문하고 더 이상 인접한 노드가 없을 때까지 이 작업을 반복적으로 수행합니다. 이 재귀 함수는 두 개의 인수를 사용합니다. 하나는 방문 중인 현재 Trie 노드를 가리키는 Trie 노드이고 다른 하나는 'str'이라는 접두사를 사용하여 지금까지 발견된 문자열을 저장하는 문자열입니다. 각 Trie 노드는 노드가 연락처(단어)의 끝을 나타내는 경우 true인 부울 변수 'isLast'를 저장합니다.

// This function displays all words with given // prefix. 'node' represents last node when // path from root follows characters of 'prefix'. displayContacts (TreiNode node string prefix) If (node.isLast is true) display prefix // finding adjacent nodes for each character ‘i’ in lower case Alphabets if (node.child[i] != NULL) displayContacts(node.child[i] prefix+i) 

사용자는 문자열을 문자별로 입력하며 입력한 모든 문자 뒤에 접두사가 형성된 제안을 표시해야 합니다. 따라서 형성된 문자열로 시작하는 접두어를 찾는 한 가지 방법은 접두어가 Trie에 존재하는지 확인한 다음, 그렇다면 displayContacts() 함수를 호출하는 것입니다. 이 접근 방식에서는 입력된 모든 문자 후에 해당 문자열이 Trie에 존재하는지 확인합니다. 계속해서 확인하는 대신 포인터를 유지할 수 있습니다. 이전노드 '는 사용자가 마지막으로 입력한 문자에 해당하는 TrieNode를 가리키는데 이제 사용자가 다른 문자를 입력하면 Trie에 존재하는지 확인하기 위해 'prevNode'에 대한 하위 노드를 확인해야 합니다. 새 접두사가 Trie에 없으면 '접두사' 뒤에 문자를 입력하여 형성된 모든 문자열을 Trie에서도 찾을 수 없습니다. 따라서 접두사를 하나씩 생성하는 데 사용되는 루프를 중단하고 나머지 모든 문자에 대해 '결과를 찾을 수 없음'을 인쇄합니다. 

C++
   // C++ Program to Implement a Phone   // Directory Using Trie Data Structure   #include          using     namespace     std  ;   struct     TrieNode     {      // Each Trie Node contains a Map 'child'      // where each alphabet points to a Trie      // Node.      // We can also use a fixed size array of      // size 256.      unordered_map   <  char       TrieNode  *>     child  ;      // 'isLast' is true if the node represents      // end of a contact      bool     isLast  ;      // Default Constructor      TrieNode  ()      {      // Initialize all the Trie nodes with NULL      for     (  char     i     =     'a'  ;     i      <=     'z'  ;     i  ++  )      child  [  i  ]     =     NULL  ;      isLast     =     false  ;      }   };   // Making root NULL for ease so that it doesn't   // have to be passed to all functions.   TrieNode  *     root     =     NULL  ;   // Insert a Contact into the Trie   void     insert  (  string     s  )   {      int     len     =     s  .  length  ();      // 'itr' is used to iterate the Trie Nodes      TrieNode  *     itr     =     root  ;      for     (  int     i     =     0  ;     i      <     len  ;     i  ++  )     {      // Check if the s[i] is already present in      // Trie      TrieNode  *     nextNode     =     itr  ->  child  [  s  [  i  ]];      if     (  nextNode     ==     NULL  )     {      // If not found then create a new TrieNode      nextNode     =     new     TrieNode  ();      // Insert into the Map      itr  ->  child  [  s  [  i  ]]     =     nextNode  ;      }      // Move the iterator('itr') to point to next      // Trie Node      itr     =     nextNode  ;      // If its the last character of the string 's'      // then mark 'isLast' as true      if     (  i     ==     len     -     1  )      itr  ->  isLast     =     true  ;      }   }   // This function simply displays all dictionary words   // going through current node. String 'prefix'   // represents string corresponding to the path from   // root to curNode.   void     displayContactsUtil  (  TrieNode  *     curNode       string     prefix  )   {      // Check if the string 'prefix' ends at this Node      // If yes then display the string found so far      if     (  curNode  ->  isLast  )      cout      < <     prefix      < <     endl  ;      // Find all the adjacent Nodes to the current      // Node and then call the function recursively      // This is similar to performing DFS on a graph      for     (  char     i     =     'a'  ;     i      <=     'z'  ;     i  ++  )     {      TrieNode  *     nextNode     =     curNode  ->  child  [  i  ];      if     (  nextNode     !=     NULL  )      displayContactsUtil  (  nextNode       prefix     +     (  char  )  i  );      }   }   // Display suggestions after every character enter by   // the user for a given query string 'str'   void     displayContacts  (  string     str  )   {      TrieNode  *     prevNode     =     root  ;      string     prefix     =     ''  ;      int     len     =     str  .  length  ();      // Display the contact List for string formed      // after entering every character      int     i  ;      for     (  i     =     0  ;     i      <     len  ;     i  ++  )     {      // 'prefix' stores the string formed so far      prefix     +=     (  char  )  str  [  i  ];      // Get the last character entered      char     lastChar     =     prefix  [  i  ];      // Find the Node corresponding to the last      // character of 'prefix' which is pointed by      // prevNode of the Trie      TrieNode  *     curNode     =     prevNode  ->  child  [  lastChar  ];      // If nothing found then break the loop as      // no more prefixes are going to be present.      if     (  curNode     ==     NULL  )     {      cout      < <     '  n  No Results Found for '      < <     prefix       < <     '  n  '  ;      i  ++  ;      break  ;      }      // If present in trie then display all      // the contacts with given prefix.      cout      < <     '  n  Suggestions based on '      < <     prefix       < <     'are '  ;      displayContactsUtil  (  curNode       prefix  );      // Change prevNode for next prefix      prevNode     =     curNode  ;      }      // Once search fails for a prefix we print      // 'Not Results Found' for all remaining      // characters of current query string 'str'.      for     (;     i      <     len  ;     i  ++  )     {      prefix     +=     (  char  )  str  [  i  ];      cout      < <     '  n  No Results Found for '      < <     prefix      < <     '  n  '  ;      }   }   // Insert all the Contacts into the Trie   void     insertIntoTrie  (  string     contacts  []     int     n  )   {      // Initialize root Node      root     =     new     TrieNode  ();      // Insert each contact into the trie      for     (  int     i     =     0  ;     i      <     n  ;     i  ++  )      insert  (  contacts  [  i  ]);   }   // Driver program to test above functions   int     main  ()   {      // Contact list of the User      string     contacts  []     =     {     'gforgeeks'       'geeksquiz'     };      // Size of the Contact List      int     n     =     sizeof  (  contacts  )     /     sizeof  (  string  );      // Insert all the Contacts into Trie      insertIntoTrie  (  contacts       n  );      string     query     =     'gekk'  ;      // Note that the user will enter 'g' then 'e' so      // first display all the strings with prefix as 'g'      // and then all the strings with prefix as 'ge'      displayContacts  (  query  );      return     0  ;   }   
Java
   // Java Program to Implement a Phone   // Directory Using Trie Data Structure   import     java.util.*  ;   class   TrieNode   {      // Each Trie Node contains a Map 'child'      // where each alphabet points to a Trie      // Node.      HashMap   <  Character    TrieNode  >     child  ;      // 'isLast' is true if the node represents      // end of a contact      boolean     isLast  ;      // Default Constructor      public     TrieNode  ()      {      child     =     new     HashMap   <  Character    TrieNode  >  ();      // Initialize all the Trie nodes with NULL      for     (  char     i     =     'a'  ;     i      <=     'z'  ;     i  ++  )      child  .  put  (  i    null  );      isLast     =     false  ;      }   }   class   Trie   {      TrieNode     root  ;      // Insert all the Contacts into the Trie      public     void     insertIntoTrie  (  String     contacts  []  )      {      root     =     new     TrieNode  ();      int     n     =     contacts  .  length  ;      for     (  int     i     =     0  ;     i      <     n  ;     i  ++  )      {      insert  (  contacts  [  i  ]  );      }      }      // Insert a Contact into the Trie      public     void     insert  (  String     s  )      {      int     len     =     s  .  length  ();      // 'itr' is used to iterate the Trie Nodes      TrieNode     itr     =     root  ;      for     (  int     i     =     0  ;     i      <     len  ;     i  ++  )      {      // Check if the s[i] is already present in      // Trie      TrieNode     nextNode     =     itr  .  child  .  get  (  s  .  charAt  (  i  ));      if     (  nextNode     ==     null  )      {      // If not found then create a new TrieNode      nextNode     =     new     TrieNode  ();      // Insert into the HashMap      itr  .  child  .  put  (  s  .  charAt  (  i  )  nextNode  );      }      // Move the iterator('itr') to point to next      // Trie Node      itr     =     nextNode  ;      // If its the last character of the string 's'      // then mark 'isLast' as true      if     (  i     ==     len     -     1  )      itr  .  isLast     =     true  ;      }      }      // This function simply displays all dictionary words      // going through current node. String 'prefix'      // represents string corresponding to the path from      // root to curNode.      public     void     displayContactsUtil  (  TrieNode     curNode        String     prefix  )      {      // Check if the string 'prefix' ends at this Node      // If yes then display the string found so far      if     (  curNode  .  isLast  )      System  .  out  .  println  (  prefix  );      // Find all the adjacent Nodes to the current      // Node and then call the function recursively      // This is similar to performing DFS on a graph      for     (  char     i     =     'a'  ;     i      <=     'z'  ;     i  ++  )      {      TrieNode     nextNode     =     curNode  .  child  .  get  (  i  );      if     (  nextNode     !=     null  )      {      displayContactsUtil  (  nextNode       prefix     +     i  );      }      }      }      // Display suggestions after every character enter by      // the user for a given string 'str'      void     displayContacts  (  String     str  )      {      TrieNode     prevNode     =     root  ;      // 'flag' denotes whether the string entered      // so far is present in the Contact List      String     prefix     =     ''  ;      int     len     =     str  .  length  ();      // Display the contact List for string formed      // after entering every character      int     i  ;      for     (  i     =     0  ;     i      <     len  ;     i  ++  )      {      // 'str' stores the string entered so far      prefix     +=     str  .  charAt  (  i  );      // Get the last character entered      char     lastChar     =     prefix  .  charAt  (  i  );      // Find the Node corresponding to the last      // character of 'str' which is pointed by      // prevNode of the Trie      TrieNode     curNode     =     prevNode  .  child  .  get  (  lastChar  );      // If nothing found then break the loop as      // no more prefixes are going to be present.      if     (  curNode     ==     null  )      {      System  .  out  .  println  (  'nNo Results Found for '      +     prefix  );      i  ++  ;      break  ;      }      // If present in trie then display all      // the contacts with given prefix.      System  .  out  .  println  (  'nSuggestions based on '      +     prefix     +     ' are '  );      displayContactsUtil  (  curNode       prefix  );      // Change prevNode for next prefix      prevNode     =     curNode  ;      }      for     (     ;     i      <     len  ;     i  ++  )      {      prefix     +=     str  .  charAt  (  i  );      System  .  out  .  println  (  'nNo Results Found for '      +     prefix  );      }      }   }   // Driver code   class   Main   {      public     static     void     main  (  String     args  []  )      {      Trie     trie     =     new     Trie  ();      String     contacts     []     =     {  'gforgeeks'       'geeksquiz'  };      trie  .  insertIntoTrie  (  contacts  );      String     query     =     'gekk'  ;      // Note that the user will enter 'g' then 'e' so      // first display all the strings with prefix as 'g'      // and then all the strings with prefix as 'ge'      trie  .  displayContacts  (  query  );      }   }   
Python3
   # Python Program to Implement a Phone   # Directory Using Trie Data Structure   class   TrieNode  :   def   __init__  (  self  ):   # Each Trie Node contains a Map 'child'   # where each alphabet points to a Trie   # Node.   self  .  child   =   {}   self  .  is_last   =   False   # Making root NULL for ease so that it doesn't   # have to be passed to all functions.   root   =   TrieNode  ()   # Insert a Contact into the Trie   def   insert  (  string  ):   # 'itr' is used to iterate the Trie Nodes   itr   =   root   for   char   in   string  :   # Check if the s[i] is already present in   # Trie   if   char   not   in   itr  .  child  :   # If not found then create a new TrieNode   itr  .  child  [  char  ]   =   TrieNode  ()   # Move the iterator('itr') to point to next   # Trie Node   itr   =   itr  .  child  [  char  ]   # If its the last character of the string 's'   # then mark 'isLast' as true   itr  .  is_last   =   True   # This function simply displays all dictionary words   # going through current node. String 'prefix'   # represents string corresponding to the path from   # root to curNode.   def   display_contacts_util  (  cur_node     prefix  ):   # Check if the string 'prefix' ends at this Node   # If yes then display the string found so far   if   cur_node  .  is_last  :   print  (  prefix  )   # Find all the adjacent Nodes to the current   # Node and then call the function recursively   # This is similar to performing DFS on a graph   for   i   in   range  (  ord  (  'a'  )   ord  (  'z'  )   +   1  ):   char   =   chr  (  i  )   next_node   =   cur_node  .  child  .  get  (  char  )   if   next_node  :   display_contacts_util  (  next_node     prefix   +   char  )   # Display suggestions after every character enter by   # the user for a given query string 'str'   def   displayContacts  (  string  ):   prev_node   =   root   prefix   =   ''   # Display the contact List for string formed   # after entering every character   for   i     char   in   enumerate  (  string  ):   # 'prefix' stores the string formed so far   prefix   +=   char   # Find the Node corresponding to the last   # character of 'prefix' which is pointed by   # prevNode of the Trie   cur_node   =   prev_node  .  child  .  get  (  char  )   # If nothing found then break the loop as   # no more prefixes are going to be present.   if   not   cur_node  :   print  (  f  'No Results Found for   {  prefix  }  n  '  )   break   # If present in trie then display all   # the contacts with given prefix.   print  (  f  'Suggestions based on   {  prefix  }   are '    end  =  ' '  )   display_contacts_util  (  cur_node     prefix  )   print  ()   # Change prevNode for next prefix   prev_node   =   cur_node   # Once search fails for a prefix we print   # 'Not Results Found' for all remaining   # characters of current query string 'str'.   for   char   in   string  [  i  +  1  :]:   prefix   +=   char   print  (  f  'No Results Found for   {  prefix  }  n  '  )   # Insert all the Contacts into the Trie   def   insertIntoTrie  (  contacts  ):   # Insert each contact into the trie   for   contact   in   contacts  :   insert  (  contact  )   # Driver program to test above functions   # Contact list of the User    contacts  =  [  'gforgeeks'    'geeksquiz'  ]   # Size of the Contact List   n  =  len  (  contacts  )   # Insert all the Contacts into Trie   insertIntoTrie  (  contacts  )   query   =   'gekk'   # Note that the user will enter 'g' then 'e' so   # first display all the strings with prefix as 'g'   # and then all the strings with prefix as 'ge'   displayContacts  (  query  )   # This code is contributed by Aman Kumar   
C#
   // C# Program to Implement a Phone    // Directory Using Trie Data Structure    using     System  ;   using     System.Collections.Generic  ;   class     TrieNode      {         // Each Trie Node contains a Map 'child'       // where each alphabet points to a Trie       // Node.       public     Dictionary   <  char       TrieNode  >     child  ;         // 'isLast' is true if the node represents       // end of a contact       public     bool     isLast  ;         // Default Constructor       public     TrieNode  ()         {         child     =     new     Dictionary   <  char       TrieNode  >  ();         // Initialize all the Trie nodes with NULL       for     (  char     i     =     'a'  ;     i      <=     'z'  ;     i  ++  )         child  .  Add  (  i       null  );         isLast     =     false  ;         }      }      class     Trie      {         public     TrieNode     root  ;         // Insert all the Contacts into the Trie       public     void     insertIntoTrie  (  String     []  contacts  )         {         root     =     new     TrieNode  ();         int     n     =     contacts  .  Length  ;         for     (  int     i     =     0  ;     i      <     n  ;     i  ++  )         {         insert  (  contacts  [  i  ]);         }         }         // Insert a Contact into the Trie       public     void     insert  (  String     s  )         {         int     len     =     s  .  Length  ;         // 'itr' is used to iterate the Trie Nodes       TrieNode     itr     =     root  ;         for     (  int     i     =     0  ;     i      <     len  ;     i  ++  )         {         // Check if the s[i] is already present in       // Trie       TrieNode     nextNode     =     itr  .  child  [  s  [  i  ]];         if     (  nextNode     ==     null  )         {         // If not found then create a new TrieNode       nextNode     =     new     TrieNode  ();         // Insert into the Dictionary       if  (  itr  .  child  .  ContainsKey  (  s  [  i  ]))      itr  .  child  [  s  [  i  ]]     =     nextNode  ;         else      itr  .  child  .  Add  (  s  [  i  ]     nextNode  );         }         // Move the iterator('itr') to point to next       // Trie Node       itr     =     nextNode  ;         // If its the last character of the string 's'       // then mark 'isLast' as true       if     (  i     ==     len     -     1  )         itr  .  isLast     =     true  ;         }         }         // This function simply displays all dictionary words       // going through current node. String 'prefix'       // represents string corresponding to the path from       // root to curNode.       public     void     displayContactsUtil  (  TrieNode     curNode           String     prefix  )         {         // Check if the string 'prefix' ends at this Node       // If yes then display the string found so far       if     (  curNode  .  isLast  )         Console  .  WriteLine  (  prefix  );         // Find all the adjacent Nodes to the current       // Node and then call the function recursively       // This is similar to performing DFS on a graph       for     (  char     i     =     'a'  ;     i      <=     'z'  ;     i  ++  )         {         TrieNode     nextNode     =     curNode  .  child  [  i  ];         if     (  nextNode     !=     null  )         {         displayContactsUtil  (  nextNode       prefix     +     i  );         }         }         }         // Display suggestions after every character enter by       // the user for a given string 'str'       public     void     displayContacts  (  String     str  )         {         TrieNode     prevNode     =     root  ;         // 'flag' denotes whether the string entered       // so far is present in the Contact List       String     prefix     =     ''  ;         int     len     =     str  .  Length  ;         // Display the contact List for string formed       // after entering every character       int     i  ;         for     (  i     =     0  ;     i      <     len  ;     i  ++  )         {         // 'str' stores the string entered so far       prefix     +=     str  [  i  ];         // Get the last character entered       char     lastChar     =     prefix  [  i  ];         // Find the Node corresponding to the last       // character of 'str' which is pointed by       // prevNode of the Trie       TrieNode     curNode     =     prevNode  .  child  [  lastChar  ];         // If nothing found then break the loop as       // no more prefixes are going to be present.       if     (  curNode     ==     null  )         {         Console  .  WriteLine  (  'nNo Results Found for '      +     prefix  );         i  ++  ;         break  ;         }         // If present in trie then display all       // the contacts with given prefix.       Console  .  WriteLine  (  'nSuggestions based on '         +     prefix     +     ' are '  );         displayContactsUtil  (  curNode       prefix  );         // Change prevNode for next prefix       prevNode     =     curNode  ;         }         for     (     ;     i      <     len  ;     i  ++  )         {         prefix     +=     str  [  i  ];         Console  .  WriteLine  (  'nNo Results Found for '      +     prefix  );         }         }      }      // Driver code    public     class     GFG      {         public     static     void     Main  (  String     []  args  )         {         Trie     trie     =     new     Trie  ();         String     []  contacts     =     {  'gforgeeks'       'geeksquiz'  };         trie  .  insertIntoTrie  (  contacts  );         String     query     =     'gekk'  ;         // Note that the user will enter 'g' then 'e' so       // first display all the strings with prefix as 'g'       // and then all the strings with prefix as 'ge'       trie  .  displayContacts  (  query  );         }      }      // This code is contributed by PrinciRaj1992   
JavaScript
    <  script  >      // Javascript Program to Implement a Phone      // Directory Using Trie Data Structure      class     TrieNode     {      constructor  ()     {      // Each Trie Node contains a Map 'child'      // where each alphabet points to a Trie      // Node.      // We can also use a fixed size array of      // size 256.      this  .  child     =     {};      // 'isLast' is true if the node represents      // end of a contact      this  .  isLast     =     false  ;      }      }      // Making root NULL for ease so that it doesn't      // have to be passed to all functions.      let     root     =     null  ;          // Insert a Contact into the Trie      function     insert  (  s  )     {      const     len     =     s  .  length  ;      // 'itr' is used to iterate the Trie Nodes      let     itr     =     root  ;      for     (  let     i     =     0  ;     i      <     len  ;     i  ++  )     {      // Check if the s[i] is already present in      // Trie      const     char     =     s  [  i  ];      let     nextNode     =     itr  .  child  [  char  ];      if     (  nextNode     ===     undefined  )     {      // If not found then create a new TrieNode      nextNode     =     new     TrieNode  ();      // Insert into the Map      itr  .  child  [  char  ]     =     nextNode  ;      }      // Move the iterator('itr') to point to next      // Trie Node      itr     =     nextNode  ;      // If its the last character of the string 's'      // then mark 'isLast' as true      if     (  i     ===     len     -     1  )     {      itr  .  isLast     =     true  ;      }      }      }          // This function simply displays all dictionary words      // going through current node. String 'prefix'      // represents string corresponding to the path from      // root to curNode.      function     displayContactsUtil  (  curNode       prefix  )     {      // Check if the string 'prefix' ends at this Node      // If yes then display the string found so far      if     (  curNode  .  isLast  )     {      document  .  write  (  prefix  +  '  
'
); } // Find all the adjacent Nodes to the current // Node and then call the function recursively // This is similar to performing DFS on a graph for ( let i = 97 ; i <= 122 ; i ++ ) { const char = String . fromCharCode ( i ); const nextNode = curNode . child [ char ]; if ( nextNode !== undefined ) { displayContactsUtil ( nextNode prefix + char ); } } } // Display suggestions after every character enter by // the user for a given query string 'str' function displayContacts ( str ) { let prevNode = root ; let prefix = '' ; const len = str . length ; // Display the contact List for string formed // after entering every character let i ; for ( i = 0 ; i < len ; i ++ ) { // 'prefix' stores the string formed so far prefix += str [ i ]; // Get the last character entered const lastChar = prefix [ i ]; // Find the Node corresponding to the last // character of 'prefix' which is pointed by // prevNode of the Trie const curNode = prevNode . child [ lastChar ]; // If nothing found then break the loop as // no more prefixes are going to be present. if ( curNode === undefined ) { document . write ( `No Results Found for ${ prefix } ` + '
'
); i ++ ; break ; } // If present in trie then display all // the contacts with given prefix. document . write ( `Suggestions based on ${ prefix } are ` ); displayContactsUtil ( curNode prefix ); document . write ( '
'
); // Change prevNode for next prefix prevNode = curNode ; } document . write ( '
'
); // Once search fails for a prefix we print // 'Not Results Found' for all remaining // characters of current query string 'str'. for (; i < len ; i ++ ) { prefix += str [ i ]; document . write ( 'No Results Found for ' + prefix + '
'
); } } // Insert all the Contacts into the Trie function insertIntoTrie ( contacts ) { // Initialize root Node root = new TrieNode (); const n = contacts . length ; // Insert each contact into the trie for ( let i = 0 ; i < n ; i ++ ) { insert ( contacts [ i ]); } } // Driver program to test above functions // Contact list of the User const contacts = [ 'gforgeeks' 'geeksquiz' ]; //Insert all the Contacts into Trie insertIntoTrie ( contacts ); const query = 'gekk' ; // Note that the user will enter 'g' then 'e' so // first display all the strings with prefix as 'g' // and then all the strings with prefix as 'ge' displayContacts ( query ); // This code is contributed by Utkarsh Kumar. < /script>

산출
Suggestions based on gare geeksquiz gforgeeks Suggestions based on geare geeksquiz No Results Found for gek No Results Found for gekk 

시간 복잡도: O(n*m) 여기서 n은 접촉 수이고 m은 접촉 문자열의 최대 길이입니다.
보조 공간: O(n*m)