Common characters in n strings

Given n strings, find the common characters in all the strings. In simple words, find characters that appear in all the strings and display them in alphabetical order or lexicographical order.

Note* we’ll be considering that the strings contain lower case letters only.

Examples:



Input :  geeksforgeeks
         gemkstones
         acknowledges
         aguelikes

Output : e g k s

Input :  apple 
         orange

Output : a e

We’ll use two hash arrays of size 26 (for a-z, where 0 is a, and z is 25).
The approach will be simple, if we have seen a character before we’ll mark it and if we haven’t then ignore the character because it is not a common one.

Psuedocode :

commonCharacters :
for i= 0 to n-1:

   // here m is length of ith string 
   for j = 0 to m-1:  
      if ( character seen before ) :
         mark the character
      else : 
         ignore it

display all the marked characters 

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP Program to find all the common characters
// in n strings
#include <bits/stdc++.h>
using namespace std;
  
const int MAX_CHAR = 26;
  
void commonCharacters(string str[], int n)
{
    // primary array for common characters 
    // we assume all characters are seen before.
    bool prim[MAX_CHAR];
    memset(prim, true, sizeof(prim));
  
    // for each string
    for (int i = 0; i < n; i++) {
  
        // secondary array for common characters
        // Initially marked false
        bool sec[MAX_CHAR] = { false };
  
        // for every character of ith string
        for (int j = 0; str[i][j]; j++) {
  
            // if character is present in all 
            // strings before, mark it.
            if (prim[str[i][j] - 'a'])
                sec[str[i][j] - 'a'] = true
        }
  
        // copy whole secondary array into primary
        memcpy(prim, sec, MAX_CHAR);
    }
  
    // displaying common characters
    for (int i = 0; i < 26; i++)
        if (prim[i])
            printf("%c ", i + 'a');
}
  
// Driver's Code
int main()
{
    string str[] = { "geeksforgeeks",
                    "gemkstones",
                    "acknowledges",
                    "aguelikes" };
    int n = sizeof(str)/sizeof(str[0]);
    commonCharacters(str, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java Program to find all the common characters
// in n strings
import java.util.*;
import java.lang.*;
  
class GFG {
  
    static int MAX_CHAR = 26;
  
    public static void commonCharacters(String str[],
                                               int n)
    {
          
        // primary array for common characters 
        // we assume all characters are seen before.
        Boolean[] prim = new Boolean[MAX_CHAR];
        Arrays.fill(prim, new Boolean(true));
  
        // for each string
        for (int i = 0; i < n; i++) {
  
            // secondary array for common characters
            // Initially marked false
            Boolean[] sec = new Boolean[MAX_CHAR];
            Arrays.fill(sec, new Boolean(false));
  
            // for every character of ith string
            for (int j = 0; j < str[i].length(); j++)
            {
  
                // if character is present in all 
                // strings before, mark it.
                if (prim[str[i].charAt(j) - 'a'])
                sec[str[i].charAt(j) - 'a'] = true
            }
  
            // copy whole secondary array into primary
            System.arraycopy(sec, 0, prim, 0, MAX_CHAR);
        }
  
        // displaying common characters
        for (int i = 0; i < 26; i++)
            if (prim[i]){
                System.out.print(Character.toChars(i 
                                               + 97));
                System.out.print(" ");
            
    }
  
    // Driver code
    public static void main(String[] args)
    {
        String str[] = { "geeksforgeeks",
                         "gemkstones",
                         "acknowledges",
                         "aguelikes" };
                           
        int n = str.length;
        commonCharacters(str, n);
    }
}
  
// This code is contributed by Prasad Kshirsagar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 Program to find all the 
# common characters in n strings
MAX_CHAR = 26
  
def commonCharacters(strings, n) :
      
    # primary array for common characters 
    # we assume all characters are seen before. 
    prim = [True] * MAX_CHAR 
      
    # for each strings 
    for i in range(n):
          
        # secondary array for common characters 
        # Initially marked false 
        sec = [False] * MAX_CHAR 
  
        # for every character of ith strings 
        for j in range(len(strings[i])):
  
            # if character is present in all 
            # strings before, mark it. 
            if (prim[ord(strings[i][j]) - ord('a')]) :
                sec[ord(strings[i][j]) - 
                    ord('a')] = True
  
        # copy whole secondary array
        # into primary 
        for i in range(MAX_CHAR):
            prim[i] = sec[i]
  
    # displaying common characters 
    for i in range(26):
        if (prim[i]) :
            print("%c " % (i + ord('a')), 
                               end = "")
  
# Driver's Code 
strings = [ "geeksforgeeks", "gemkstones"
            "acknowledges", "aguelikes" ]
n = len(strings)
commonCharacters(strings, n) 
  
# This code is contributed by Niwesh Gupta

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# Program to find all the 
// common characters in n strings
using System; 
  
class GFG 
{
  
    static int MAX_CHAR = 26;
  
    public static void commonCharacters(String []str,
                                            int n)
    {
          
        // primary array for common characters 
        // we assume all characters are seen before.
        Boolean[] prim = new Boolean[MAX_CHAR];
          
        for(int i = 0; i < prim.Length; i++)
            prim[i] = true;
  
        // for each string
        for (int i = 0; i < n; i++)
        {
  
            // secondary array for common characters
            // Initially marked false
            Boolean[] sec = new Boolean[MAX_CHAR];
              
            for(int s = 0; s < sec.Length; s++)
                sec[s]=false;
  
            // for every character of ith string
            for (int j = 0; j < str[i].Length; j++)
            {
  
                // if character is present in all 
                // strings before, mark it.
                if (prim[str[i][j] - 'a'])
                sec[str[i][j] - 'a'] = true
            }
  
            // Copy whole secondary array into primary
            Array.Copy(sec, 0, prim, 0, MAX_CHAR);
        }
  
        // Displaying common characters
        for (int i = 0; i < 26; i++)
            if (prim[i])
            {
                Console.Write((char)(i + 97));
                Console.Write(" ");
            
    }
  
    // Driver code
    public static void Main(String[] args)
    {
        String []str = { "geeksforgeeks",
                        "gemkstones",
                        "acknowledges",
                        "aguelikes" };
                          
        int n = str.Length;
        commonCharacters(str, n);
    }
}
  
// This code is contributed by Rajput-JI

chevron_right


Output:

e g k s

This article is contributed by Shubham Rana. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up



Article Tags :
Practice Tags :


8


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.