Sentence that contains all the given phrases

07 Jul, 2022
Given a list of sentences and a list of phrases. The task is to find which sentence(s) contain all the words in a phrase and for every phrase print the sentences number that contains the given phrase. Constraint: A word cannot be a part of more than 10 sentences. Examples:
Input: 
Sentences: 1. Strings are an array of characters. 2. Sentences are an array of words. 
Phrases: 1. an array of 2. sentences are strings 
Output: Phrase1 is present in sentences: 1,2 Phrase2 is present in sentences: None Since each word in phrase 1 exists in both the sentences, but all the words in second phrase do not exist in either.
 Input: 
Sentences: 1. Sets in python are a hash table representation of arrays. 2. Searching in Sets are a function of time complexity O(1). 3. Sets only contain unique elements, and have no order. 
Phrases: 1. Sets are a 2. Searching in 
Output: Phrase1 is present in sentences: 1, 2 Phrase2 is present in sentences: 2
Approach: For each Phrase, we have to find the sentences which contain all the words of the phrase. So, for each word in the given phrase, we check if a sentence contains it. We do this for each sentence. This process of searching may become faster if the words in the sentence are stored in a set instead of a list. Below is the implementation of above approach: 
Java
Python3
// Java program to find the sentence// that contains all the given phrasesimport java.io.*;import java.util.*; class GFG {    static void getRes(String[] sent, String[] ph)    {        HashMap<String, HashSet<String> > sentHash            = new HashMap<>();        // Loop for adding hashed sentences to sentHash        for (String s : sent) {            HashSet<String> set = new HashSet<>(                Arrays.asList(s.split(" ")));            sentHash.put(s, set);        }        for (int p = 0; p < ph.length; p++) {            System.out.println("Phrase" + (p + 1) + ":");             // Get the list of Words            String[] wordList = ph[p].split(" ");            ArrayList<Integer> res = new ArrayList<>();             // Then Check in every Sentence            for (int s = 1; s <= sent.length; s++) {                int wCount = wordList.length;                 // Every word in the Phrase                for (String w : wordList) {                    if (sentHash.get(sent[s - 1])                            .contains(w)) {                        wCount--;                    }                }                // If every word in phrase matches                if (wCount == 0) {                    // add Sentence Index to result Array                    res.add(s);                }            }            if (res.size() == 0) {                System.out.println("NONE");            }            else {                for (Integer i : res) {                    System.out.print(i + " ");                }                System.out.println();            }        }    }     // Driver Code    public static void main(String[] args)    {        String[] sent            = { "Strings are an array of characters",                "Sentences are an array of words" };        String[] ph            = { "an array of", "sentences are strings" };        getRes(sent, ph);    }}// This code is contributed by Karandeep1234
# Python program to find the sentence# that contains all the given phrasesdef getRes(sent, ph):    sentHash = dict()     # Loop for adding hashed sentences to sentHash    for s in range(1, len(sent)+1):        sentHash[s] = set(sent[s-1].split())             # For Each Phrase    for p in range(0, len(ph)):        print("Phrase"+str(p + 1)+":")         # Get the list of Words        wordList = ph[p].split()        res = []         # Then Check in every Sentence        for s in range(1, len(sentHash)+1):            wCount = len(wordList)             # Every word in the Phrase            for w in wordList:                if w in sentHash[s]:                    wCount -= 1             # If every word in phrase matches            if wCount == 0:             # add Sentence Index to result Array                res.append(s)        if(len(res) == 0):            print("NONE")        else:            print('% s' % ' '.join(map(str, res))) # Driver Functiondef main():    sent = ["Strings are an array of characters",    "Sentences are an array of words"]    ph = ["an array of", "sentences are strings"]    getRes(sent, ph) main()
Phrase1:
1 2
Phrase2:
NONE
simmytarika5
karandeep1234
Flipkart
Hash
Picked
python-dict
Data Structures
Flipkart
Data Structures
python-dict
Hash
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Advantages and Disadvantages of Linked List
Data Structures | Array | Question 2
Data Structures | Binary Search Trees | Question 8
Data Structures | Queue | Question 2
Amazon Interview Experience for SDE-II
Data Structures | Hash | Question 5
Difference between Singly linked list and Doubly linked list
Data Structures | Linked List | Question 16
Data Structures | Linked List | Question 4