Python code to print common characters of two Strings in alphabetical order

06 Jul, 2022
Given two strings, print all the common characters in lexicographical order. If there are no common letters, print -1. All letters are lower case. Examples:
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
This problem has existing solution please refer Print common characters of two Strings in alphabetical order link. We will solve this problem in python using intersection property and collections.Counter() module. Approach is simple,
Convert both strings into dictionary data type using Counter(str) method, which contains characters of string as key and their frequencies as value.Now find common elements between two strings using intersection ( a&b ) property.Resultant will also be an counter dictionary having common elements as keys and their common frequencies as value.Use elements() method of counter dictionary to expand list of keys by their frequency number of times.Sort the list and concatenate each character of output list without space to print resultant string.
Convert both strings into dictionary data type using Counter(str) method, which contains characters of string as key and their frequencies as value.
Now find common elements between two strings using intersection ( a&b ) property.
Resultant will also be an counter dictionary having common elements as keys and their common frequencies as value.
Use elements() method of counter dictionary to expand list of keys by their frequency number of times.
Sort the list and concatenate each character of output list without space to print resultant string.
Python3
# Function to print common characters of two Strings# in alphabetical orderfrom 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 programif __name__ == "__main__":    str1 = 'geeks'    str2 = 'forgeeks'    common(str1, str2)
Output:
eegks
Time complexity : O(n) Auxiliary Space : O(n)
a7977370173
amit007prakash
Python string-programs
python-string
Python
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Iterate over a list in Python
Rotate axis tick labels in Seaborn and Matplotlib
Enumerate() in Python
Deque in Python
Stack in Python
Reverse a string in Java
Write a program to reverse an array or string
C++ Data Types
KMP Algorithm for Pattern Searching
Write a program to print all permutations of a given string