Python中的键盘距离

0 python string

我正在尝试编写一个简单的python算法来解决这个问题.你能帮我弄清楚为什么我的代码不能正常工作:

问题:

Jakub正在尝试一维键盘.它由一排键组成.任意两个相邻键之间的距离为1.每个键包含一个不同的英文字母.Jakub只用一根手指在键盘上打字.他想知道在键入给定单词时他将要移动手指的最小总距离是多少.

例如,如果键盘的唯一行是"qwertyuiop",并且Jakub想要输入单词"potter",他将不得不将他的手指从'p'移动到'o'(距离1),从'o'移动到' t'(距离4),从't'到't'(距离0),从't'到'e'(距离2)和从'e'到'r'(距离1),总距离1 + 4 + 0 + 2 + 1 = 8.

给你一个字符串键盘和一个字符串单词,描述键盘和Jakub想要写的单词.返回他需要移动手指的最小距离,以便在键盘上键入单词.

我的代码:

def typingDistance (keyboard, word):
    a=keyboard.find(word[0][:1])
    res=0
    for i in word:
        if keyboard.find(i) != a:
            res+=abs(a-i)
        a = keyboard.find(i)
    return res
Run Code Online (Sandbox Code Playgroud)

Vee*_*rac 5

问题是,你正在做a-i那里i是字母代替a-position.提出要求并瞧不起!

def typingDistance (keyboard, word):
    a = keyboard.find(word[0][:1])

    res=0
    for i in word:
        position = keyboard.find(i)
        if position != a:
            res += abs(a-position)
        a = position
    return res
Run Code Online (Sandbox Code Playgroud)

请注意,这word[0]是一个字母,因此word[0][:1]相同的字母(因为"a"[:1]只是"一个").所以你可以把它留下来:

另请注意,您无需做任何if position != a距离0:

def typingDistance (keyboard, word):
    a = keyboard.find(word[0])

    res=0
    for i in word:
        position = keyboard.find(i)
        res += abs(a-position)
        a = position
    return res
Run Code Online (Sandbox Code Playgroud)

最后请注意,最好在开始时制作一个映射字母→它们在键盘上的索引,这样你就可以避免keyboard.find过于频繁地调用.这只会在word比你长得多的时候有所帮助keyboard,但是当你学习时这是一个很好的习惯:

def typingDistance(keyboard, word):
    letter2position = {letter: keyboard.index(letter) for letter in keyboard}

    a = letter2position[word[0]]
    res=0
    for i in word:
        position = letter2position[i]
        res += abs(a-position)
        a = position
    return res
Run Code Online (Sandbox Code Playgroud)

注意,letter2position[...]简单地替换keyboard.find(...); 如果您意识到函数是输入到输出的映射,那么这是有意义的,因此letter2position它只是一个预先计算好所有结果的函数.