【问题标题】:Minimum Deletions Python, While Loop Conditional statement behavior最小删除 Python,While 循环条件语句行为
【发布时间】:2021-08-05 23:58:32
【问题描述】:

我一直在尝试解决 LeetCode 问题 1647。
目标是提供我们需要在字符串中删除的最少次数,以使该字符串中每个字母的频率唯一。
我试图自己解决它,但遇到了相当困难的时候,我找到了一个非常接近我想法的解决方案。
不幸的是,由于我认为可能是某些 Python 特定行为,我很难理解它。

from collections import Counter

s = 'aaabbcc'
letterFrequency = Counter(s)

frequencyValues = letterFrequency.values()

frequencySet = set()

count = 0

for frequencyValue in frequencyValues:
    while frequencyValue and frequencyValue in frequencySet:
        count += 1
        frequencyValue -= 1
    frequencySet.add(frequencyValue)

print(count)

我特别不明白的部分是 while 循环上的条件语句
我知道这个特定的条件 frequencyValue and frequencyValue in frequencySet 正在检查值是否在 frequencySet 中,尽管我不确定这个条件是如何让我们检查 frequencyValue 是否是多余的,从而添加了额外的删除。

我已经包含了指向实际 LeetCode 问题 here 的链接。

如果我正在准备面试,任何建议都将不胜感激^^

【问题讨论】:

  • 相当于while frequencyValue > 0 and frequencyValue in frequencySet:

标签: python algorithm while-loop


【解决方案1】:

解释

Counter 是一个带有字母的字典:计数值

对于值中的每个字母,如果已经遇到计数(即在频率集中收集),您必须开始计算需要多少更改才能只有唯一值。 由此算法是:

在每个重复值处: 按 1 计数公司 值 dec 减 1

在循环结束时,您有一组 uniq 值,计数是达到目标的总移动数。

ps:祝面试顺利

【讨论】:

  • “从大到小”:在程序中哪里可以保证?
  • 你是对的
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 2016-03-30
  • 2020-03-19
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
相关资源
最近更新 更多