Open In App

Check if All Words Exist in a Sentence

Last Updated : 25 Jul, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a space separated strings sentence and an array of strings words[], the task is to determine if the sentence contains all the words from the array, returning true if all are present and false otherwise.

Example:

Input: sentence: "the quick brown fox jumps over the lazy dog", words: ["quick", "fox", "dog"]
Output: true
Explanation: All the words "quick", "fox", and "dog" are present in the sentence.

Input: sentence: "the quick brown fox jumps over the lazy dog", words: ["quick", "cat", "dog"]
Output: false
Explanation: The word "cat" is not present in the sentence, hence the output is false.

[Naive Approach] By Searching Each Word in Sentence Iteratively - O(n+k*m) time and O(m+k) space

The naive approach to checking if all words from a list are present in a sentence is quite simple and straightforward. First, we take the sentence and break it down into individual words, which we can do by splitting the sentence at each space. This gives us a collection of words that we can easily look through.

Next, for each word in our list, we manually check if it exists in the collection of words from the sentence. We do this by going through the list one word at a time and searching for it among the words we extracted from the sentence. If we find any word from the list that isn’t in the sentence, we can immediately say that not all words are present and return false. However, if we manage to check all the words in the list and find them all in the sentence, we return true.

While this method is easy to understand, it can be less efficient, especially with longer sentences or larger lists of words, since it requires multiple searches for each word.

Code Implementation:

C++
#include <bits/stdc++.h>
using namespace std;

// Function to check if all words are present in the
// sentence using a naive approach
bool areAllWordsPresent(const string& sentence,
                        const vector<string>& words)
{
    // Step 1: Tokenize the sentence
    vector<string> sentenceWords;
    stringstream ss(sentence);
    string word;

    while (ss >> word) {
        sentenceWords.push_back(word);
    }

    // Step 2: Check each word in the words array
    for (const string& w : words) {
        bool found = false;
        for (const string& sWord : sentenceWords) {
            if (w == sWord) {

                // Word found in the sentence
                found = true;
                break;
            }
        }
        if (!found) {

            // Word not found
            return false;
        }
    }

    // All words are present
    return true;
}

// Driver code
int main()
{
    // Example 1
    string sentence1
        = "the quick brown fox jumps over the lazy dog";
    vector<string> words1 = { "quick", "fox", "dog" };
    cout << (areAllWordsPresent(sentence1, words1)
                 ? "true"
                 : "false")
         << endl;

    // Example 2
    string sentence2
        = "the quick brown fox jumps over the lazy dog";
    vector<string> words2 = { "quick", "cat", "dog" };
    cout << (areAllWordsPresent(sentence2, words2)
                 ? "true"
                 : "false")
         << endl;

    return 0;
}
Java
import java.util.ArrayList;
import java.util.List;

public class WordChecker {
    // Function to check if all words are present in the
    // sentence using a naive approach
    public static boolean
    areAllWordsPresent(String sentence, String[] words)
    {
        // Step 1: Tokenize the sentence
        List<String> sentenceWords = new ArrayList<>();
        String[] splitSentence = sentence.split(" ");

        for (String word : splitSentence) {
            sentenceWords.add(word);
        }

        // Step 2: Check each word in the words array
        for (String w : words) {
            boolean found = false;
            for (String sWord : sentenceWords) {
                if (w.equals(sWord)) {
                    // Word found in the sentence
                    found = true;
                    break;
                }
            }
            if (!found) {
                // Word not found
                return false;
            }
        }

        // All words are present
        return true;
    }

    public static void main(String[] args)
    {
        // Example 1
        String sentence1
            = "the quick brown fox jumps over the lazy dog";
        String[] words1 = { "quick", "fox", "dog" };
        System.out.println(
            areAllWordsPresent(sentence1, words1)
                ? "true"
                : "false");

        // Example 2
        String sentence2
            = "the quick brown fox jumps over the lazy dog";
        String[] words2 = { "quick", "cat", "dog" };
        System.out.println(
            areAllWordsPresent(sentence2, words2)
                ? "true"
                : "false");
    }
}
Python
def areAllWordsPresent(sentence, words):
    # Step 1: Tokenize the sentence
    sentence_words = sentence.split()

    # Step 2: Check each word in the words array
    for w in words:
        found = False
        for s_word in sentence_words:
            if w == s_word:
                # Word found in the sentence
                found = True
                break
        if not found:
            # Word not found
            return False

    # All words are present
    return True


# Example usage
sentence1 = "the quick brown fox jumps over the lazy dog"
words1 = ["quick", "fox", "dog"]
print("true" if areAllWordsPresent(sentence1, words1) else "false")

sentence2 = "the quick brown fox jumps over the lazy dog"
words2 = ["quick", "cat", "dog"]
print("true" if areAllWordsPresent(sentence2, words2) else "false")
JavaScript
function areAllWordsPresent(sentence, words)
{
    // Step 1: Tokenize the sentence
    const sentenceWords = sentence.split(" ");

    // Step 2: Check each word in the words array
    for (const w of words) {
        let found = false;
        for (const sWord of sentenceWords) {
            if (w === sWord) {
                // Word found in the sentence
                found = true;
                break;
            }
        }
        if (!found) {
            // Word not found
            return false;
        }
    }

    // All words are present
    return true;
}

// Example usage
const sentence1
    = "the quick brown fox jumps over the lazy dog";
const words1 = [ "quick", "fox", "dog" ];
console.log(areAllWordsPresent(sentence1, words1)
                ? "true"
                : "false");

const sentence2
    = "the quick brown fox jumps over the lazy dog";
const words2 = [ "quick", "cat", "dog" ];
console.log(areAllWordsPresent(sentence2, words2)
                ? "true"
                : "false");

Output
true
false

Time Complexity: O(n+k*m), where n is the length of the sentence, m is the number of words in the words array, and k is the number of words in the sentence.
Auxiliary Space: O(m+k)

[Expected Approach] Using Hashing - O(n+m+k) time and O(m+k) space

To determine if a sentence contains all the words from a given list, we can break down the problem into simple steps. First, we take the sentence and split it into individual words, creating a collection of these words. This process, known as tokenization and allows us to easily manage and search through the words in the sentence.

We use a data structure called an unordered set, which enables fast lookups to check if a word exists. Next, we iterate through the list of words we want to check. For each word, we see if it is present in our collection of words from the sentence. If we find any word from the list that is missing in the sentence, we can immediately conclude that not all words are present and return false. If we go through the entire list and find all the words, we return true, indicating that the sentence contains every word we were looking for.

Code Implementation:

C++
#include <bits/stdc++.h>
using namespace std;

// Function to check if all words are present in the
// sentence
bool areAllWordsPresent(const string& sentence,
                        const vector<string>& words)
{

    // Step 1: Tokenize the sentence
    unordered_set<string> wordSet;
    stringstream ss(sentence);
    string word;

    while (ss >> word) {
        wordSet.insert(word);
    }

    // Step 2: Check each word in the words array
    for (const string& w : words) {
        if (wordSet.find(w) == wordSet.end()) {
            // Word not found
            return false;
        }
    }

    // All words are present
    return true;
}

// Driver code
int main()
{

    // Example 1
    string sentence1
        = "the quick brown fox jumps over the lazy dog";
    vector<string> words1 = { "quick", "fox", "dog" };
    bool result1 = areAllWordsPresent(sentence1, words1);
    cout << (result1 ? "true" : "false") << endl;

    // Example 2
    string sentence2
        = "the quick brown fox jumps over the lazy dog";
    vector<string> words2 = { "quick", "cat", "dog" };
    bool result2 = areAllWordsPresent(sentence2, words2);
    cout << (result2 ? "true" : "false") << endl;

    return 0;
}
Java
import java.util.*;
import java.util.HashSet;

public class WordChecker {
    public static boolean
    areAllWordsPresent(String sentence, String[] words)
    {
        // Step 1: Tokenize the sentence
        Set<String> wordSet = new HashSet<>();
        String[] sentenceWords = sentence.split(" ");

        for (String word : sentenceWords) {
            wordSet.add(word);
        }

        // Step 2: Check each word in the words array
        for (String w : words) {
            if (!wordSet.contains(w)) {
                return false; // Word not found
            }
        }

        return true; // All words are present
    }

    public static void main(String[] args)
    {
        String sentence1
            = "the quick brown fox jumps over the lazy dog";
        String[] words1 = { "quick", "fox", "dog" };
        System.out.println(
            areAllWordsPresent(sentence1, words1));

        String sentence2
            = "the quick brown fox jumps over the lazy dog";
        String[] words2 = { "quick", "cat", "dog" };
        System.out.println(
            areAllWordsPresent(sentence2, words2));
    }
}
Python
def areAllWordsPresent(sentence, words):
    # Step 1: Tokenize the sentence
    word_set = set(sentence.split())

    # Step 2: Check each word in the words array
    for w in words:
        if w not in word_set:
            return False  # Word not found

    return True  # All words are present


# Example usage
sentence1 = "the quick brown fox jumps over the lazy dog"
words1 = ["quick", "fox", "dog"]
print(areAllWordsPresent(sentence1, words1))

sentence2 = "the quick brown fox jumps over the lazy dog"
words2 = ["quick", "cat", "dog"]
print(areAllWordsPresent(sentence2, words2))
JavaScript
function areAllWordsPresent(sentence, words)
{
    // Step 1: Tokenize the sentence
    const wordSet = new Set(sentence.split(" "));

    // Step 2: Check each word in the words array
    for (const w of words) {
        if (!wordSet.has(w)) {

            // Word not found
            return false;
        }
    }

    // All words are present
    return true;
}

// Example usage
const sentence1
    = "the quick brown fox jumps over the lazy dog";
const words1 = [ "quick", "fox", "dog" ];
console.log(areAllWordsPresent(sentence1, words1));

const sentence2
    = "the quick brown fox jumps over the lazy dog";
const words2 = [ "quick", "cat", "dog" ];
console.log(areAllWordsPresent(sentence2, words2));

Output
true
false

Time Complexity: O(n+m+k), n is the length of the sentence, m is the number of words in the sentence and k is the number of words to check.
Auxiliary Space: O(m+k)



Article Tags :

Similar Reads