📜  Python Counter 查找最大字谜词子集的大小

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

Python Counter 查找最大字谜词子集的大小

给定一个包含小写字母的 n字符串数组。找到字符串的最大子集的大小,它们是彼此的字谜。一个字符串的变位词是另一个包含相同字符的字符串,只是字符的顺序可以不同。例如,“abcd”和“dabc”是彼此的字谜。

例子:

Input: 
ant magenta magnate tan gnamate
Output: 3
Explanation
Anagram strings(1) - ant, tan
Anagram strings(2) - magenta, magnate,
                     gnamate
Thus, only second subset have largest
size i.e., 3

Input: 
cars bikes arcs steer 
Output: 2

对于这个问题,我们有现有的解决方案,请参阅 Find the size of maximum subset of anagram words 链接。我们可以在Python中使用 Counter() 方法快速解决这个问题。方法很简单,

  1. 将用空格分隔的输入字符串拆分为单词。
  2. 正如我们所知,如果两个字符串包含相同的字符集,则它们彼此是字谜。因此,首先要将所有这些字符串放在一起,我们将对给定字符串列表中的每个字符串进行排序。
  3. 现在使用Counter方法创建一个字典,将字符串作为键,将它们的频率作为值。
  4. 检查频率的最大值,这将是 anagram 字符串的最大子集。
# Function to find the size of largest subset 
# of anagram words
from collections import Counter
  
def maxAnagramSize(input):
  
    # split input string separated by space
    input = input.split(" ")
  
    # sort each string in given list of strings
    for i in range(0,len(input)):
         input[i]=''.join(sorted(input[i]))
  
    # now create dictionary using counter method
    # which will have strings as key and their 
    # frequencies as value
    freqDict = Counter(input)
  
    # get maximum value of frequency
    print (max(freqDict.values()))
  
# Driver program
if __name__ == "__main__":
    input = 'ant magenta magnate tan gnamate'
    maxAnagramSize(input)

输出:

3