假设我们有一个称为投票的字符串列表,这里的每个条目都用小写字母表示,并且按从最高到最低的优先顺序代表候选人的投票。在这里,候选人的排名首先取决于获得最高优先级的选票数。现在,如果有平局,我们将检查在下一个最高优先级下获得的票数,依此类推。如果仍然有联系,则将按字母顺序对其进行排名。因此,我们必须按排名从高到低的顺序找到球队的最终排名。
因此,如果输入就像表决= [“ zyx”,“ zxy”,“ xyz”],则输出将是“ zxy”,因为z获得了最高优先级的最多数目,因此它排名第一。然后,x获得最高优先级的第二多票,而y没有获得任何最高优先级的投票。
为了解决这个问题,我们将遵循以下步骤-
count:=投票中字符串的长度
cand:=一个空的映射,其中每个键都是一个大小计数列表,最初它们填充为0
对于投票中的每个v,
将cand [c,i]增加1
对于每个索引i和v中的值c,
根据值按降序对Cand项目进行排序,如果值相同,则按字母顺序对它们进行排序
通过串联排序后的元素返回字符串。
让我们看下面的实现以更好地理解-
from collections import defaultdict class Solution: def solve(self, votes): count = len(votes[0]) cand = defaultdict(lambda: [0] * count) for v in votes: for i, c in enumerate(v): cand[c][i] += 1 return "".join(sorted(cand.keys(), key=lambda x: (cand[x], -ord(x)), reverse=True)) ob = Solution()votes = ["zyx", "zxy", "xyz"] print(ob.solve(votes))
["zyx", "zxy", "xyz"]
输出结果
zxy