【发布时间】:2021-10-18 00:24:49
【问题描述】:
我无法计算您必须按键盘输入某个字符串的最少次数。规则如下:
- 您键入的每个字母都算作 1 次击键
- 激活大写锁定计为 1 次击键
- 停用大写锁定计为 1 次击键
- 按 shift 计为 1 次击键
- 按住 shift 键的时间不能超过一个字母
- 您需要编写一个函数,该函数接收一个字符串并返回键入该字符串所需的最小击键次数(整数)
我在尝试用 Python 编写代码时遇到了一些小问题。 到目前为止我的代码:
def getAns(string):
uppercase_count = 0
keystrokes = 0
for i in range(len(string)):
if string[i] == string[i].upper():
uppercase_count += 1
if uppercase_count == 1:
keystrokes += 1
else:
if uppercase_count > 1:
keystrokes += 1
uppercase_count = 0
keystrokes += 1
return keystrokes
测试字符串:
"EWlweWXZXxcscSDSDcccsdcfdsFvccDCcDCcdDcGvTvEEdddEEddEdEdAs"
我的函数返回 79 而不是应该返回的 78。我在我的逻辑中找不到任何问题。有人可以帮帮我吗?
这是正确的答案代码,但我不明白其中的区别
def getAns(self, s):
if not s:
return 0
cap = 0
res = 0
chars = ["abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
for i,c in enumerate(s):
if c in chars[cap]:
res+=1
else:
t = abs(cap - 1)
if i+1 < len(s) and s[i+1] in chars[t]:
cap = t
res+=2
return res
【问题讨论】:
-
遵循你的代码真的很难。什么是
m,什么是x,什么是ups?请通过输入有意义的名称重新编写您的代码(当然,如果您想帮助我们处理逻辑部分) -
@SeVenVo1d 谢谢你的建议!我更新了代码。
-
我认为79是正确的
-
如果字符串以大写结尾会发生什么?喜欢
aabCC -
@Amin 那么你就不必释放大写锁定。我也输入了解决方案代码,但我无法区分他们的逻辑和我的逻辑。 ^