Dadas dos strings en minúsculas, la tarea es convertirlas en Anagrama . La única operación permitida es eliminar un carácter de cualquier string. ¿Encontrar el número mínimo de caracteres que se eliminarán para hacer que ambas strings sean un anagrama? Si dos strings contienen el mismo conjunto de datos en cualquier orden, las strings se denominan Anagramas .
Ejemplos :
Input : str1 = "bcadeh" str2 = "hea" Output: 3 We need to remove b, c and d from str1. Input : str1 = "cddgk" str2 = "gcd" Output: 2 Input : str1 = "bca" str2 = "acb" Output: 0
Este problema tiene una solución existente, consulte Eliminar la cantidad mínima de caracteres para que dos strings se conviertan en un enlace de anagrama. Resolveremos este problema en python rápidamente usando Counter() y Dictionary Data Structure y la propiedad de intersección de Set data structure. El enfoque es muy simple,
- Convierta cada string en una estructura de datos de diccionario utilizando el método Counter (iterable) .
- Contar el número de claves en ambos diccionarios (contar1, contar2) y contar el número de claves comunes en ambos diccionarios.
- Si no se encuentran claves comunes, eso significa que debemos eliminar los caracteres count1 + count2 de ambas strings.
- De lo contrario (max(count1, count2) – countCommon) será la cantidad de caracteres que se eliminarán
Implementación:
Python3
# Function remove minimum number of characters so that # two strings become anagram from collections import Counter def removeChars(str1, str2): # make dictionaries from both strings dict1 = Counter(str1) dict2 = Counter(str2) # extract keys from dict1 and dict2 keys1 = dict1.keys() keys2 = dict2.keys() # count number of keys in both lists of keys count1 = len(keys1) count2 = len(keys2) # convert list of keys in set to find common keys set1 = set(keys1) commonKeys = len(set1.intersection(keys2)) if (commonKeys == 0): return count1 + count2 else: return (max(count1, count2)-commonKeys) # Driver program if __name__ == "__main__": str1 ='bcadeh' str2 ='hea' print (removeChars(str1, str2))
3
Solución alternativa:
- Convierta cada string en una estructura de datos de diccionario utilizando el método Counter (iterable) .
- Encuentra los elementos comunes de ambos diccionarios
- Sume los valores del diccionario común para obtener el número total de elementos comunes.
Implementación:
Python3
# Function remove minimum number of characters so that # two strings become anagram from collections import Counter def removeChars(a, b): # make dictionaries from both strings c1 = Counter(a) c2 = Counter(b) # finding the common elements from both dictionary common = c1&c2 value = 0 # adding up the key from common dictionary in order # to get the total number of common elements for key in common: value = value + common[key] # returning the number of elements to be # removed to form an anagram return (len(a)-2*value+ len(b)) # Driver program if __name__ == "__main__": str1 ='bcadeh' str2 ='hea' print (removeChars(str1, str2))
3
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