Código de Python para imprimir caracteres comunes de dos strings en orden alfabético

Dadas dos strings, imprime todos los caracteres comunes en orden lexicográfico. Si no hay letras comunes, imprima -1. Todas las letras son minúsculas. 

Ejemplos:

Input : 
string1 : geeks
string2 : forgeeks
Output : eegks
Explanation: The letters that are common between 
the two strings are e(2 times), g(1 time), k(1 time) and 
s(1 time).
Hence the lexicographical output is "eegks"

Input : 
string1 : hhhhhello
string2 : gfghhmh
Output : hhh

Este problema tiene una solución existente, consulte el enlace Imprimir caracteres comunes de dos strings en orden alfabético . Resolveremos este problema en python usando la propiedad de intersección y el módulo collections.Counter() . El enfoque es simple,

  1. Convierta ambas strings en un tipo de datos de diccionario utilizando el método Counter(str) , que contiene caracteres de string como clave y sus frecuencias como valor.
  2. Ahora encuentre elementos comunes entre dos strings usando la propiedad de intersección (a&b) .
  3. Resultará también un contador de diccionario que tendrá elementos comunes como claves y sus frecuencias comunes como valor.
  4. Use el método de elements() del diccionario de contador para expandir la lista de claves por su número de veces de frecuencia.
  5. Ordene la lista y concatene cada carácter de la lista de salida sin espacio para imprimir la string resultante.

Implementación:

Python3

# Function to print common characters of two Strings
# in alphabetical order
from collections import Counter
 
def common(str1,str2):
     
    # convert both strings into counter dictionary
    dict1 = Counter(str1)
    dict2 = Counter(str2)
 
    # take intersection of these dictionaries
    commonDict = dict1 & dict2
 
    if len(commonDict) == 0:
        print (-1)
        return
 
    # get a list of common elements
    commonChars = list(commonDict.elements())
 
    # sort list in ascending order to print resultant
    # string on alphabetical order
    commonChars = sorted(commonChars)
 
    # join characters without space to produce
    # resultant string
    print (''.join(commonChars))
 
# Driver program
if __name__ == "__main__":
    str1 = 'geeks'
    str2 = 'forgeeks'
    common(str1, str2)

Producción:

eegks

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

Deja una respuesta

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