我正在尝试编写一个简单的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)
问题是,你正在做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它只是一个预先计算好所有结果的函数.
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |