Skip to content
Related Articles

Related Articles

Common characters in n strings

View Discussion
Improve Article
Save Article
Like Article
  • Difficulty Level : Medium
  • Last Updated : 16 Jun, 2022

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.
Pseudocode
 

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++




// 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;
}

Java




// 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

Python3




# 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

C#




// 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

Javascript




<script>
 
// JavaScript Program to find all the
// common characters in n strings
const MAX_CHAR = 26
 
function commonCharacters(strings, n) {
     
    // primary array for common characters
    // we assume all characters are seen before.
    let prim = new Array(MAX_CHAR).fill(true)
     
    // for each strings
    for(let i = 0; i < n; i++){
         
        // secondary array for common characters
        // Initially marked false
        let sec = new Array(MAX_CHAR).fill(false)
 
        // for every character of ith strings
        for(let j = 0; j < strings[i].length; j++){
 
            // if character is present in all
            // strings before, mark it.
            if (prim[strings[i].charCodeAt(j) - ('a').charCodeAt(0)])
                sec[strings[i].charCodeAt(j) - ('a').charCodeAt(0)] = true
        }
 
        // copy whole secondary array
        // into primary
        for(let i = 0; i < MAX_CHAR; i++){
            prim[i] = sec[i]
        }
    }
 
    // displaying common characters
    for(let i = 0; i < 26; i++){
        if (prim[i])
            document.write(String.fromCharCode(i +('a').charCodeAt(0))," ")
    }
}
 
// Driver's Code
let strings = [ "geeksforgeeks", "gemkstones",
            "acknowledges", "aguelikes" ]
let n = strings.length
commonCharacters(strings, n)
 
// This code is contributed by shinjanpatra
 
</script>

Output: 
 

e g k s

Time complexity : O(n) 
Auxiliary Space : O(1)

This article is contributed by Shubham Rana. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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
Recommended Articles
Page :

Start Your Coding Journey Now!