You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串最短单词查找Python代码仅过2/5测试用例,求排查边缘场景

代码错误分析:寻找最短单词的遗漏场景

题目要求

给定字符串S(可包含多个单词),需找出长度最短的单词。注意:若多个单词长度相同,取字符串中第一个最短单词,单词仅由单个空格分隔。约束条件:1 ≤ 字符串S长度 ≤ 10^5。

问题代码

string = input().strip()
n=len(string)
words=string.split()
dic={}
for word in words:
    dic[word]=len(word)
word=""
if n!=0:
    mini = len(words[0])
    word=words[0]
    for wordss in dic:
        if (dic[wordss]<mini):
            word = wordss
            mini = dic[wordss]
print(word)

遗漏的边缘场景及错误原因

  • 多个不同的最短单词,字典遍历顺序先访问后出现的最短单词
    比如输入字符串:"ab cd ef a b",正确答案是第一个出现的最短单词"a",但代码可能输出"b"。原因是字典遍历顺序在Python3.7之前完全无序,若遍历过程中先遇到"b",会将word更新为"b",后续遇到"a"时因长度相同不会触发更新,最终返回错误结果。

  • Python版本低于3.7时,字典遍历完全无序导致顺序错误
    在Python3.6及更早版本中,字典的键是无序存储的,遍历顺序完全不遵循单词的输入顺序。当存在多个不同的最短单词时,代码可能随机返回其中一个,而非原字符串中第一个出现的那个,这会导致大量测试用例失败。

  • 输入字符串无有效单词(全空格场景)
    比如输入" "(长度为3,符合约束条件),strip()后得到空字符串,words为空列表。此时代码中n=0,最终输出空字符串。若测试用例对无单词场景有特定要求,此处理逻辑可能不符合预期。

核心问题总结

代码的根本错误是使用字典存储单词,破坏了原单词的输入顺序,无法保证找到第一个出现的最短单词。正确的做法应该直接遍历原words列表,记录当前最短单词的长度和第一个出现的单词,无需使用字典。

内容的提问来源于stack exchange,提问作者Abhinav Tahlani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:23:11