Imprimer les caractères communs de deux chaînes par ordre alphabétique

Imprimer les caractères communs de deux chaînes par ordre alphabétique
Essayez-le sur GfG Practice

Étant donné deux chaînes, imprimez tous les caractères communs dans lexicographique commande. S'il n'y a pas de lettres communes, imprimez -1. Toutes les lettres sont en minuscules. 
 

Exemples :  

  Input :    string1 : geeks string2 : forgeeks   Output :   eegks   Explanation:   The letters that are common between the two strings are e(2 times) k(1 time) and s(1 time). Hence the lexicographical output is 'eegks'   Input :    string1 : hhhhhello string2 : gfghhmh   Output :   hhh 

L'idée est d'utiliser des tableaux de nombre de caractères. 



  1. Comptez les occurrences de tous les caractères de « a » à « z » dans la première et la deuxième chaînes. Stockez ces comptes dans deux tableaux a1[] et a2[]. 
  2. Traversez a1[] et a2[] (notez que la taille des deux est de 26). Pour chaque index, j'imprime le caractère 'a' + i un nombre de fois égal à min(a1[i] a2[i]).

Vous trouverez ci-dessous la mise en œuvre des étapes ci-dessus. 

C++
   // C++ program to print common characters   // of two Strings in alphabetical order   #include       using     namespace     std  ;   int     main  ()   {      string     s1     =     'geeksforgeeks'  ;      string     s2     =     'practiceforgeeks'  ;          // to store the count of       // letters in the first string      int     a1  [  26  ]     =     {  0  };          // to store the count of       // letters in the second string      int     a2  [  26  ]     =     {  0  };      int     i          j  ;      char     ch  ;      char     ch1     =     'a'  ;      int     k     =     (  int  )  ch1       m  ;          // for each letter present increment the count      for  (  i     =     0     ;     i      <     s1  .  length  ()     ;     i  ++  )      {         a1  [(  int  )  s1  [  i  ]     -     k  ]  ++  ;      }      for  (  i     =     0     ;     i      <     s2  .  length  ()     ;     i  ++  )      {      a2  [(  int  )  s2  [  i  ]     -     k  ]  ++  ;      }      for  (  i     =     0     ;     i      <     26     ;     i  ++  )      {      // the if condition guarantees that       // the element is common that is       // a1[i] and a2[i] are both non zero      // means that the letter has occurred      // at least once in both the strings      if     (  a1  [  i  ]     !=     0     and     a2  [  i  ]     !=     0  )      {      // print the letter for a number      // of times that is the minimum       // of its count in s1 and s2      for  (  j     =     0     ;     j      <     min  (  a1  [  i  ]          a2  [  i  ])     ;     j  ++  )      {      m     =     k     +     i  ;      ch     =     (  char  )(  k     +     i  );         cout      < <     ch  ;         }      }      }      return     0  ;   }      
Java
   // Java program to print common characters   // of two Strings in alphabetical order   import     java.io.*  ;   import     java.util.*  ;   // Function to find similar characters   public     class   Simstrings   {      static     final     int     MAX_CHAR     =     26  ;      static     void     printCommon  (  String     s1       String     s2  )      {      // two arrays of length 26 to store occurrence      // of a letters alphabetically for each string      int  []     a1     =     new     int  [  MAX_CHAR  ]  ;      int  []     a2     =     new     int  [  MAX_CHAR  ]  ;      int     length1     =     s1  .  length  ();      int     length2     =     s2  .  length  ();      for     (  int     i     =     0     ;     i      <     length1     ;     i  ++  )      a1  [  s1  .  charAt  (  i  )     -     'a'  ]     +=     1  ;      for     (  int     i     =     0     ;     i      <     length2     ;     i  ++  )      a2  [  s2  .  charAt  (  i  )     -     'a'  ]     +=     1  ;      // If a common index is non-zero it means      // that the letter corresponding to that      // index is common to both strings      for     (  int     i     =     0     ;     i      <     MAX_CHAR     ;     i  ++  )      {      if     (  a1  [  i  ]     !=     0     &&     a2  [  i  ]     !=     0  )      {      // Find the minimum of the occurrence      // of the character in both strings and print      // the letter that many number of times      for     (  int     j     =     0     ;     j      <     Math  .  min  (  a1  [  i  ]       a2  [  i  ]  )     ;     j  ++  )      System  .  out  .  print  (((  char  )(  i     +     'a'  )));      }      }      }      // Driver code      public     static     void     main  (  String  []     args  )     throws     IOException      {      String     s1     =     'geeksforgeeks'       s2     =     'practiceforgeeks'  ;      printCommon  (  s1       s2  );      }   }   
Python3
   # Python3 program to print common characters   # of two Strings in alphabetical order   # Initializing size of array   MAX_CHAR  =  26   # Function to find similar characters   def   printCommon  (   s1     s2  ):   # two arrays of length 26 to store occurrence   # of a letters alphabetically for each string   a1   =   [  0   for   i   in   range  (  MAX_CHAR  )]   a2   =   [  0   for   i   in   range  (  MAX_CHAR  )]   length1   =   len  (  s1  )   length2   =   len  (  s2  )   for   i   in   range  (  0    length1  ):   a1  [  ord  (  s1  [  i  ])   -   ord  (  'a'  )]   +=   1   for   i   in   range  (  0    length2  ):   a2  [  ord  (  s2  [  i  ])   -   ord  (  'a'  )]   +=   1   # If a common index is non-zero it means   # that the letter corresponding to that   # index is common to both strings   for   i   in   range  (  0    MAX_CHAR  ):   if   (  a1  [  i  ]   !=   0   and   a2  [  i  ]   !=   0  ):   # Find the minimum of the occurrence   # of the character in both strings and print   # the letter that many number of times   for   j   in   range  (  0    min  (  a1  [  i  ]  a2  [  i  ])):   ch   =   chr  (  ord  (  'a'  )  +  i  )   print   (  ch     end  =  ''  )   # Driver code   if   __name__  ==  '__main__'  :   s1   =   'geeksforgeeks'   s2   =   'practiceforgeeks'   printCommon  (  s1     s2  );   # This Code is contributed by Abhishek Sharma   
C#
   // C# program to print common characters   // of two Strings in alphabetical order   using     System  ;   // Function to find similar characters   public     class     Simstrings   {      static     int     MAX_CHAR     =     26  ;          static     void     printCommon  (  string     s1       string     s2  )      {      // two arrays of length 26 to store occurrence      // of a letters alphabetically for each string      int  []     a1     =     new     int  [  MAX_CHAR  ];      int  []     a2     =     new     int  [  MAX_CHAR  ];          int     length1     =     s1  .  Length  ;      int     length2     =     s2  .  Length  ;          for     (  int     i     =     0     ;     i      <     length1     ;     i  ++  )      a1  [  s1  [  i  ]     -     'a'  ]     +=     1  ;          for     (  int     i     =     0     ;     i      <     length2     ;     i  ++  )      a2  [  s2  [  i  ]     -     'a'  ]     +=     1  ;          // If a common index is non-zero it means      // that the letter corresponding to that      // index is common to both strings      for     (  int     i     =     0     ;     i      <     MAX_CHAR     ;     i  ++  )      {      if     (  a1  [  i  ]     !=     0     &&     a2  [  i  ]     !=     0  )      {      // Find the minimum of the occurrence      // of the character in both strings and print      // the letter that many number of times      for     (  int     j     =     0     ;     j      <     Math  .  Min  (  a1  [  i  ]     a2  [  i  ])     ;     j  ++  )      Console  .  Write  (((  char  )(  i     +     'a'  )));      }      }      }          // Driver code      public     static     void     Main  ()      {      string     s1     =     'geeksforgeeks'       s2     =     'practiceforgeeks'  ;      printCommon  (  s1       s2  );      }   }   
JavaScript
    <  script  >   // Javascript program to print common characters   // of two Strings in alphabetical order          let     MAX_CHAR     =     26  ;      // Function to find similar characters      function     printCommon  (  s1    s2  )      {      // two arrays of length 26 to store occurrence      // of a letters alphabetically for each string      let     a1     =     new     Array  (  MAX_CHAR  );      let     a2     =     new     Array  (  MAX_CHAR  );      for  (  let     i  =  0  ;  i   <  MAX_CHAR  ;  i  ++  )      {      a1  [  i  ]  =  0  ;      a2  [  i  ]  =  0  ;      }          let     length1     =     s1  .  length  ;      let     length2     =     s2  .  length  ;          for     (  let     i     =     0     ;     i      <     length1     ;     i  ++  )      a1  [  s1  [  i  ].  charCodeAt  (  0  )     -     'a'  .  charCodeAt  (  0  )]     +=     1  ;          for     (  let     i     =     0     ;     i      <     length2     ;     i  ++  )      a2  [  s2  [  i  ].  charCodeAt  (  0  )     -     'a'  .  charCodeAt  (  0  )]     +=     1  ;          // If a common index is non-zero it means      // that the letter corresponding to that      // index is common to both strings      for     (  let     i     =     0     ;     i      <     MAX_CHAR     ;     i  ++  )      {      if     (  a1  [  i  ]     !=     0     &&     a2  [  i  ]     !=     0  )      {      // Find the minimum of the occurrence      // of the character in both strings and print      // the letter that many number of times      for     (  let     j     =     0     ;     j      <     Math  .  min  (  a1  [  i  ]     a2  [  i  ])     ;     j  ++  )      document  .  write  ((  String  .  fromCharCode  (  i     +     'a'  .  charCodeAt  (  0  ))));      }      }      }          // Driver code      let     s1     =     'geeksforgeeks'       s2     =     'practiceforgeeks'  ;      printCommon  (  s1       s2  );                  // This code is contributed by avanitrachhadiya2155    <  /script>   

Sortir
eeefgkors 

Complexité temporelle : Si nous considérons n = longueur (chaîne plus grande), alors cet algorithme s'exécute dans Sur) complexité. 
Espace auxiliaire : O(1).

Créer un quiz

Top Articles

Catégorie

Des Articles Intéressants