Druk gemeenschappelijke tekens van twee strings in alfabetische volgorde af

Druk gemeenschappelijke tekens van twee strings in alfabetische volgorde af
Probeer het eens op GfG Practice

Gegeven twee strings worden alle gebruikelijke tekens afgedrukt lexicografisch volgorde. Als er geen algemene letters zijn, wordt -1 afgedrukt. Alle letters zijn kleine letters. 
 

Voorbeelden:  

  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 

Het idee is om arrays voor het aantal tekens te gebruiken. 

  1. Tel het voorkomen van alle tekens van 'a' tot 'z' in de eerste en tweede tekenreeks. Sla deze tellingen op in twee arrays a1[] en a2[]. 
  2. Beweeg a1[] en a2[] (de notitiegrootte van beide is 26). Voor elke index print ik karakter 'a' + i aantal keren gelijk aan min(a1[i] a2[i]).

Hieronder vindt u de implementatie van bovenstaande stappen. 

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>   

Uitvoer
eeefgkors 

Tijdcomplexiteit: Als we n = lengte (grotere reeks) beschouwen, wordt dit algoritme uitgevoerd Op) complexiteit. 
Hulpruimte: O(1).

Quiz maken