Skip to content
Related Articles

Related Articles

Common characters in n strings

Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 20 Jul, 2022
Improve Article
Save Article

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 

Implementation:

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. 


My Personal Notes arrow_drop_up

Start Your Coding Journey Now!