Oración que contiene todas las frases dadas

Dada una lista de oraciones y una lista de frases. La tarea es encontrar qué oración(es) contiene(n) todas las palabras de una frase y para cada frase imprimir el número de oración que contiene la frase dada. Restricción: Una palabra no puede ser parte de más de 10 oraciones. Ejemplos:

Aporte: 

Oraciones: 1. Las strings son una array de caracteres. 2. Las oraciones son una array de palabras. 

Frases: 1. una array de 2. oraciones son strings 

Salida: Phrase1 está presente en oraciones: 1,2 Phrase2 está presente en oraciones: Ninguno Dado que cada palabra en la frase 1 existe en ambas oraciones, pero todas las palabras en la segunda frase no existen en ninguna.

 Aporte: 

Oraciones: 1. Los conjuntos en python son una representación de tablas hash de arrays. 2. Búsqueda en Los conjuntos son una función de la complejidad del tiempo O(1). 3. Los conjuntos solo contienen elementos únicos y no tienen orden. 

Frases: 1. Los conjuntos son un 2. Buscando en 

Salida: Phrase1 está presente en oraciones: 1, 2 Phrase2 está presente en oraciones: 2

Enfoque : para cada frase, tenemos que encontrar las oraciones que contienen todas las palabras de la frase. Entonces, para cada palabra en la frase dada, verificamos si una oración la contiene. Hacemos esto para cada oración. Este proceso de búsqueda puede volverse más rápido si las palabras de la oración se almacenan en un conjunto en lugar de una lista. A continuación se muestra la implementación del enfoque anterior: 

Java

// Java program to find the sentence
// that contains all the given phrases
import 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

Python3

# Python program to find the sentence
# that contains all the given phrases
def 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 Function
def 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()
Producción:

Phrase1:
1 2
Phrase2:
NONE

Publicación traducida automáticamente

Artículo escrito por joshi_arihant y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *