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()
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