我正试图解决这个小问题差不多一个小时。
Python
是麻省理工学院的学生,喜欢水果。他有不同的类型 水果(以大写字母表示)每天从他的房子到 麻省理工学院校园在路上吃饭。但他吃水果的方式是独一无二的。 他吃完每一个水果后(除了最后一个他吃的水果) 到达校园,他休息了30秒,他买了1 每种类型的水果,而不是他刚刚拥有的水果。Cobra
,他的亲密 朋友,有一天决定对Python
进行检查。他跟着他 他去麻省理工学院的校园,记下了他吃的水果类型 字符串模式的形式(例如AABBBBCA
)。你能帮忙Cobra
确定不同类型水果的最大数量 当Python
到达校园时,它会出现在哪里?编写一个带有两个参数的函数
nfruits
:
包含水果类型及其数量的非空字典,当他离开家时(长度<10),<{1}}
Python
所观察到的Python
旅程所吃的水果的字符串模式。此函数应返回不同的最大数量 当
Cobra
到达时,Python
可用的水果类型 校园。例如,如果初始数量为
{'A': 1, 'B': 2, 'C': 3}
然后字符串模式是AC
:消耗了
A
,更新后的值为{'A': 0, 'B': 2, 'C': 3}
Python
购买B
和C
,更新后的值为{'A': 0, 'B': 3, 'C': 4}
- 'C'已消耗,更新值为
醇>{'A': 0, 'B': 3, 'C': 3}
现在
Python
已经到达校园。所以函数将返回3 最多是三种水果的数量。
这是MOOC的可选练习,因此没有评分:我解决了更难的问题(更难)但我无法解决它。
我的尝试:
def nfruits(dictionary, string):
i = 0
string = sorted(string)
for char in string:
dictionary[char] -= 1
# print dictionary
i += 1
for char in string[i:]:
dictionary[char] += 1
# print dictionary
return dictionary[max(dictionary, key = dictionary.get)]
答案 0 :(得分:3)
如何在任何地方添加1
,然后为特定密钥减去2
呢?
像
这样的东西def nfruits(dictionary, string):
i = 0
string = sorted(string)
for idx, char in enumerate(string):
# We should update other fruits on all steps except the
# last one
if idx < len(string) - 1:
for key in dictionary:
dictionary[key] += 1
dictionary[char] -= 2
else:
# for the last step - only decrement the fruit
# Python ate
dictionary[char] -= 1
print dictionary
return dictionary[max(dictionary, key = dictionary.get)]
if __name__ == "__main__":
dd = {'A': 1, 'B': 2, 'C': 3}
print nfruits(dd, 'AC')
更新:当我们浏览dict时,还有一个选项就是跳过char
:
def nfruits2(dictionary, string):
i = 0
string = sorted(string)
for idx, char in enumerate(string):
# Update the fruit Python ate
dictionary[char] -= 1
# update others he bought, skip this on the last step
if idx < len(string) - 1:
for key in dictionary:
if key != char:
dictionary[key] += 1
print dictionary
return dictionary[max(dictionary, key = dictionary.get)]