Python代码按字母顺序打印两个字符串的常见字符
给定两个字符串,按字典顺序打印所有常见字符。如果没有常用字母,则打印 -1。所有字母均为小写。
例子:
Input :
string1 : geeks
string2 : forgeeks
Output : eegks
Explanation: The letters that are common between
the two strings are e(2 times), k(1 time) and
s(1 time).
Hence the lexicographical output is "eegks"
Input :
string1 : hhhhhello
string2 : gfghhmh
Output : hhh
此问题已有解决方案,请参考按字母顺序打印两个字符串的常用字符链接。我们将在Python中使用交集属性和 collections.Counter() 模块来解决这个问题。做法很简单,
- 使用Counter(str)方法将两个字符串转换为字典数据类型,其中包含字符的字符串作为键,它们的频率作为值。
- 现在使用intersection ( a&b )属性查找两个字符串之间的共同元素。
- 结果也将是一个计数器字典,具有作为键的公共元素和作为值的公共频率。
- 使用计数器字典的elements()方法按其频率次数扩展键列表。
- 对列表进行排序并连接输出列表的每个字符,没有空格以打印结果字符串。
# 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)
输出:
eegks