📌  相关文章
📜  Python字典,设置和计数器来检查频率是否可以变得相同

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

Python字典,设置和计数器来检查频率是否可以变得相同

给定一个包含较低字母字符的字符串,我们需要从该字符串中删除最多一个字符,使得每个不同字符的频率在字符串中变得相同。

例子:

Input  : str = “xyyz”
Output : Yes
We can remove character ’y’ from above 
string to make the frequency of each 
character same. 

Input : str = “xyyzz” 
Output : Yes
We can remove character ‘x’ from above 
string to make the frequency of each 
character same.

Input : str = “xxxxyyzz” 
Output : No
It is not possible to make frequency of 
each character same just by removing at 
most one character from above string.

此问题已有解决方案,请参考检查是否所有字符的频率可以通过一个删除链接变得相同。我们将在Python中快速解决这个问题。方法很简单,

  1. 我们需要计算字符串中每个字母的频率,为此我们将使用 Counter(input) 方法,它返回一个字典,其中字符作为键,它们各自的频率作为值。
  2. 现在提取每个字符的频率列表,并将这些值推Python的 Set() 数据结构中。
  3. 由于 set 包含唯一值,因此如果 set 的大小为 1,则表示所有字符的频率相同,如果 set 的大小为 2,则检查第一个元素的值是否为 1(如果为 1,则我们可以通过删除来使频率相同最多一个字符,否则不可能)。
    # Function to Check if frequency of all characters
    # can become same by one removal
    from collections import Counter
      
    def allSame(input):
          
        # calculate frequency of each character
        # and convert string into dictionary
        dict=Counter(input)
      
        # now get list of all values and push it
        # in set
        same = list(set(dict.values()))
      
        if len(same)>2:
            print('No')
        elif len (same)==2 and same[1]-same[0]>1:
            print('No')
        else:
            print('Yes')
      
          
        # now check if frequency of all characters 
        # can become same
          
    # Driver program
    if __name__ == "__main__":
        input = 'xxxyyzzt'
        allSame(input)
    

    输出:

    No