最小击键次数 Python 计算器问题

Minimum Keystrokes Python Calculator Problem

我无法计算您必须按键盘键入特定字符串的最少次数。规则如下:

我在尝试在 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

当您将输入字符串缩减为 最小 子字符串而您仍然 得到不同的输出时,您将识别此子字符串:

"DCcD"

对于此输入,您的函数将 return 7,而正确的代码 returns 6.

您的函数识别此序列:

大写字母打开 D C 大写字母关闭 c Shift+D = 7

但是......它来了......正确的解决方案确定了这个序列:

Caps ON D C Shift +c D = 6

考虑到您可以使用Shift CAPS-LOCK 开启时,这将产生一个小写字母!