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++
// 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 |
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.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.