📌  相关文章
📜  打印包含给定单词的所有字符的列表项

📅  最后修改于: 2022-05-13 01:57:08.025000             🧑  作者: Mango

打印包含给定单词的所有字符的列表项

有一个项目列表。给定一个特定的单词,例如“sun”,打印出列表中包含“sun”所有字符的所有项目。
例如,如果给定的单词是“sun”并且项目是“sunday”、“geeksforgeeks”、“utensils”、“”just”和“sss”,那么程序应该打印“sunday”和“utensils”。

算法:感谢 geek4u 提出这个算法。

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++ program to print all strings that contain all
// characters of a word
#include 
#include
#include
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
// C program to print all strings that contain all
// characters of a word
# include 
# include 
# include 
# 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
// Java program to print all strings that contain all
// characters of a word
class 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
# Python program to print the list items containing all
# characters of a given word
NO_OF_CHARS = 256
 
# Prints list items having all characters of word
def 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 function
string = "sun"
list = ["geeksforgeeks", "unsorted", "sunday", "just", "sss"]
printList(list, string, 5)
 
# This code is contributed by Bhavya Jain


C#
// C# program to print all strings that contain
// all characters of a word
using System;
 
class GFG{
     
static 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[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 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 ukasp


输出:

unsorted
 sunday

时间复杂度: O(n + m),其中 n 是项目列表中的字符总数。并且 m =(列表中的项目数)*(给定单词中的字符数)