对于 prombel5 autocorrect中的要求:差异值相同时,输出列表靠前的单词,最开始以为自己灵机一动——倒序循环,一直更新(可以免去判断位置前后的判断),这样就可以取出最小最靠前的啦,于是便有了下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
res = 1000
check = about2(word_list)
if check(typed_word):
return typed_word
else:
#从后往前免去一个判断——靠前输出
word_list.reverse() # 反转
for x in word_list:
pre = res
diff = diff_function(typed_word,x,limit)
res = min(res,diff)
if pre != res or diff - pre == 0:
final = x
if res <= limit:
return final
return typed_word

由于判断条件多,设置了很多量来存储,隐隐约约能感觉到写的很冗余,测试的时候只过了103个
(一共104个,其实在第四个就测试不过了,查完测试文档,我想知道是否只有这个过不了,就把他删再测试结果剩下103个全过),第四个的word_list是一个有几十万个单词的列表,我去查了其中的文档,找他的测试案例编写了一个相对位置一样的简化例子,简化例子能输出正确答案,我不知道哪里出了问题

去问了GPT,他认为我的反转带来了错误,我解释完我的代码他又认可了(他之前忽略了我其中一个判断条件diff - pre == 0,这是防止差异值相同的判断。)依旧没找出问题,但GPT写的代码就很简洁了,值得学习,我冗余的部分被修改的明明白白:

1
2
3
4
5
6
7
8
9
10
11
12
13
check = about2(word_list)
if check(typed_word):
return typed_word
else:
res = float('inf') # 使用无穷大表示初始的最小差异
final = typed_word

for x in word_list:
diff = diff_function(typed_word, x, limit)
if diff <= limit and diff < res: # 更新最小差异和最终结果
res = diff
final = x
return final

看完他的代码我才知道我的“灵光一闪”挺搞笑的,差异值没有原先的小直接不更新就好了,反转更麻烦···,GPT的代码是可以通过所有案例的。