【发布时间】: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