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.
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> |
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 Login to comment...