📌  相关文章
📜  Python代码按字母顺序打印两个字符串的常见字符

📅  最后修改于: 2022-05-13 01:55:07.957000             🧑  作者: Mango

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() 模块来解决这个问题。做法很简单,

  1. 使用Counter(str)方法将两个字符串转换为字典数据类型,其中包含字符的字符串作为键,它们的频率作为值。
  2. 现在使用intersection ( a&b )属性查找两个字符串之间的共同元素。
  3. 结果也将是一个计数器字典,具有作为键的公共元素和作为值的公共频率。
  4. 使用计数器字典的elements()方法按其频率次数扩展键列表。
  5. 对列表进行排序并连接输出列表的每个字符,没有空格以打印结果字符串。
# 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