Print list items containing all characters of a given word

24 Dec, 2021
There is a list of items. Given a specific word, e.g., “sun”, print out all the items in list which contain all the characters of “sun”. For example if the given word is “sun” and the items are “sunday”, “geeksforgeeks”, “utensils”, “”just” and “sss”, then the program should print “sunday” and “utensils”.
Algorithm: Thanks to geek4u for suggesting this algorithm. 
1) Initialize a binary map:
        map[256] = {0, 0, ..}
2) Set values in map[] for the given word "sun"
        map['s'] = 1,  map['u'] = 1,  map['n'] = 1
3) Store length of the word "sun":
        len = 3 for "sun"
4) Pick words (or items)one by one from the list
    a) set count = 0;
    b) For each character ch of the picked word
         if(map['ch'] is set)
            increment count and unset map['ch'] 
    c) If count becomes equal to len (3 for "sun"),
           print the currently picked word.
    d) Set values in map[] for next list item
          map['s'] = 1,  map['u'] = 1,  map['n'] = 1
C++
C
Java
Python
C#
// C++ program to print all strings that contain all// characters of a word#include <bits/stdc++.h>#include<stdio.h>#include<string.h>using namespace std;# define NO_OF_CHARS 256 /* prints list items having all characters of word */void print(char list[][50], char *word, int list_size){    /*Since calloc is used, map[] is initialized as 0 */    int *map = new int[(sizeof(int)*NO_OF_CHARS)];    int i, j, count, word_size;     /*Set the values in map */    for (i = 0; *(word+i); i++)        map[*(word + i)] = 1;     /* Get the length of given word */    word_size = strlen(word);     /* Check each item of list if has all characters    of word*/    for (i = 0; i < list_size; i++)    {        for (j = 0, count = 0; *(list[i] + j); j++)        {            if (map[*(list[i] + j)])            {                count++;                 /* unset the bit so that strings like                sss not printed*/                map[*(list[i] + j)] = 0;            }        }        if (count == word_size)            cout << list[i] << endl;         /*Set the values in map for next item*/        for (j = 0; *(word + j); j++)            map[*(word + j)] = 1;    }} /* Driver code*/int main(){    char str[] = "sun";    char list[][50] = {"geeksforgeeks", "unsorted", "sunday",                    "just", "sss" };    print(list, str, 5);    return 0;} // This is code is contributed by rathbhupendra
// C program to print all strings that contain all// characters of a word# include <stdio.h># include <stdlib.h># include <string.h># define NO_OF_CHARS 256 /* prints list items having all characters of word */void print(char *list[], char *word, int list_size){    /*Since calloc is used, map[] is initialized as 0 */    int *map = (int *)calloc(sizeof(int), NO_OF_CHARS);    int i, j, count, word_size;     /*Set the values in map */    for (i = 0; *(word+i); i++)        map[*(word + i)] = 1;     /* Get the length of given word */    word_size = strlen(word);     /* Check each item of list if has all characters     of word*/    for (i = 0; i < list_size; i++)    {        for (j = 0, count = 0; *(list[i] + j); j++)        {            if (map[*(list[i] + j)])            {                count++;                 /* unset the bit so that strings like                   sss not printed*/                map[*(list[i] + j)] = 0;            }        }        if (count == word_size)            printf("\n %s", list[i]);         /*Set the values in map for next item*/        for (j = 0; *(word+j); j++)            map[*(word + j)] = 1;    }} /* Driver program to test to print printDups*/int main(){    char str[] = "sun";    char *list[] = {"geeksforgeeks", "unsorted", "sunday",                    "just", "sss" };    print(list, str, 5);    getchar();    return 0;}
// Java program to print all strings that contain all// characters of a wordclass GFG{  static final int NO_OF_CHARS = 256;   /* prints list items having all characters of word */  static void print(String[] list, String word, int list_size)  {    /*         * Since calloc is used, map[] is initialized as 0         */    int[] map = new int[NO_OF_CHARS];    int i, j, count, word_size;     /* Set the values in map */    for (i = 0; i < word.length(); i++)      map[word.charAt(i)] = 1;     /* Get the length() of given word */    word_size = word.length();     /*         * Check each item of list if has all characters of word         */    for (i = 0; i < list_size; i++)    {      for (j = 0, count = 0; j < list[i].length(); j++)      {        if (map[list[i].charAt(j)] > 0)        {          count++;           /*            * unset the bit so that strings like sss not printed             */          map[list[i].charAt(j)] = 0;        }      }      if (count == word_size)        System.out.println(list[i]);       /* Set the values in map for next item */      for (j = 0; j < word.length(); j++)        map[word.charAt(j)] = 1;    }  }   /* Driver code */  public static void main(String[] args)  {     String str = "sun";    String[] list = { "geeksforgeeks", "unsorted",                     "sunday", "just", "sss" };    print(list, str, 5);  }} // This code is contributed by sanjeev2552
# Python program to print the list items containing all# characters of a given wordNO_OF_CHARS = 256 # Prints list items having all characters of worddef printList(list, word, list_size):    map = [0] * NO_OF_CHARS     # Set the values in map    for i in word:        map[ord(i)] = 1     # Get the length of given word    word_size = len(word)     # Check each item of list if has all characters    # of words    for i in list:        count = 0        for j in i:            if map[ord(j)]:                count+=1                 # unset the bit so that strings like sss                # not printed                map[ord(j)] = 0        if count==word_size:            print i         # Set the values in map for next item        for j in xrange(len(word)):            map[ord(word[j])] = 1 # Driver program to test the above functionstring = "sun"list = ["geeksforgeeks", "unsorted", "sunday", "just", "sss"]printList(list, string, 5) # This code is contributed by Bhavya Jain
// C# program to print all strings that contain// all characters of a wordusing System; class GFG{     static int NO_OF_CHARS = 256; // Prints list items having all characters of wordstatic void print(string[] list, string word,                  int list_size){    // Since calloc is used, map[] is    // initialized as 0    int[] map = new int[NO_OF_CHARS];    int i, j, count, word_size;     // Set the values in map    for (i = 0; i < word.Length; i++)        map[word[i]] = 1;     // Get the length() of given word    word_size = word.Length;     // Check each item of list if has all    // characters of word    for(i = 0; i < list_size; i++)    {        for(j = 0, count = 0; j < list[i].Length; j++)        {            if (map[list[i][j]] > 0)            {                count++;                 // unset the bit so that strings like                // sss not printed                map[list[i][j]] = 0;            }        }        if (count == word_size)            Console.WriteLine(list[i]);         // Set the values in map for next item        for(j = 0; j < word.Length; j++)            map[word[j]] = 1;    }} // Driver codepublic static void Main(string[] args){    string str = "sun";    string[] list = { "geeksforgeeks", "unsorted",                      "sunday", "just", "sss" };    print(list, str, 5);}}     // This code is contributed by ukasp
Output: 
unsorted
 sunday
Time Complexity: O(n + m) where n is total number of characters in the list of items. And m = (number of items in list) * (number of characters in the given word)
Please write comments if you find any bug in above code/algorithm, or find other ways to solve the same problem 
rathbhupendra
sanjeev2552
ukasp
sweetyty
sagartomar9927
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 50 String Coding Problems for Interviews
What is Data Structure: Types, Classifications and Applications
Print all the duplicates in the input string
Print all subsequences of a string
A Program to check if strings are rotations of each other or not
String class in Java | Set 1
Find if a string is interleaved of two other strings | DP-33
Remove first and last character of a string in Java
Check if an URL is valid or not using Regular Expression
Find the smallest window in a string containing all characters of another string