Dada una secuencia de strings, la tarea es encontrar la segunda string más repetida (o frecuente) en la secuencia dada. (Teniendo en cuenta que no hay dos palabras que sean las segundas más repetidas, siempre habrá una sola palabra).
Ejemplos:
Input : {"aaa", "bbb", "ccc", "bbb", "aaa", "aaa"} Output : bbb Input : {"geeks", "for", "geeks", "for", "geeks", "aaa"} Output : for
Este problema tiene una solución existente, consulte la segunda palabra más repetida en un enlace de secuencia . Podemos resolver este problema rápidamente en Python usando el método Counter (iterador) .
El enfoque es muy simple:
- Cree un diccionario usando el método Counter (iterador) que contiene palabras como claves y su frecuencia como valor.
- Ahora obtenga una lista de todos los valores en el diccionario y ordénela en orden descendente. Elija el segundo elemento de la lista ordenada porque será el segundo más grande.
- Ahora recorra el diccionario nuevamente e imprima la clave cuyo valor es igual al segundo elemento más grande.
Implementación
Python3
# Python code to print Second most repeated # word in a sequence in Python from collections import Counter def secondFrequent(input): # Convert given list into dictionary # it's output will be like {'ccc':1,'aaa':3,'bbb':2} dict = Counter(input) # Get the list of all values and sort it in ascending order value = sorted(dict.values(), reverse=True) # Pick second largest element secondLarge = value[1] # Traverse dictionary and print key whose # value is equal to second large element for (key, val) in dict.items(): if val == secondLarge: print(key) return # Driver program if __name__ == "__main__": input = ['aaa', 'bbb', 'ccc', 'bbb', 'aaa', 'aaa'] secondFrequent(input)
bbb
Complejidad temporal: O(nlogn) donde n es la longitud de la lista de entrada
Espacio auxiliar: O(n) donde n es la longitud de la lista de entrada
Implementación alternativa:
Python3
# returns the second most repeated word from collections import Counter class Solution: def secFrequent(self, arr, n): all_freq = dict(Counter(arr)) store = [] for w in sorted(all_freq, key=all_freq.get): # if add key=all_freq.get will sort according to values # without key=all_freq.get will sort according to keys if w not in store: store.append(w) return store[-2] # driver code or main function if __name__ == '__main__': # no. of test cases t = 1 for _ in range(t): # no of words n = 7 # String of words arr = ["cat","mat","cat","mat","cat",'ball',"tall"] ob = Solution() ans = ob.secFrequent(arr,n) print(ans)
mat
Complejidad temporal: O(nlogn)
Espacio auxiliar: O(n)
Publicación traducida automáticamente
Artículo escrito por Shashank Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA