Dada una string de caracteres en minúscula solamente, la tarea es verificar si es posible dividir una string desde el medio, lo que dará dos mitades con los mismos caracteres y la misma frecuencia de cada carácter. Si la longitud de la string dada es impar, ignore el elemento central y verifique el resto. Ejemplos:
Input : abbaab Output : NO The two halves contain the same characters but their frequencies do not match so they are NOT CORRECT Input : abccab Output : YES
Este problema tiene una solución existente, consulte Verifique si ambas mitades de la string tienen el mismo enlace de conjunto de caracteres. Resolveremos este problema en Python rápidamente usando la comparación de diccionarios . El enfoque es muy simple:
- Divida la string en dos partes y convierta ambas partes en un diccionario usando el método Counter (iterador) , cada diccionario contiene su carácter como clave y la frecuencia como valor.
- Ahora compare estos dos diccionarios. En python podemos comparar dos usando el operador == , primero verifica que las claves de ambos diccionarios sean iguales o no, luego verifica los valores de cada clave. Si todo es igual, eso significa que dos diccionarios son idénticos.
Implementación:
Python3
# Function to Check if both halves of # the string have same set of characters from collections import Counter def checkTwoHalves(input): length = len(input) # Break input string in two parts if (length % 2 != 0): first = input[0:length // 2] second = input[(length // 2) + 1:] else: first = input[0:length // 2] second = input[length // 2:] # Convert both halves into dictionary and compare if Counter(first) == Counter(second): print ('YES') else: print ('NO') # Driver program if __name__ == "__main__": input = 'abbaab' checkTwoHalves(input)
NO
Complejidad temporal: O(n)
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