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

如何用Python找出升序排列单词中的缺失字母?

问题分析与代码修正

首先你的代码存在以下几个核心问题:

  • 逻辑分支完全颠倒:本该处理含*场景的代码,被放到了if '*' not in word分支中;全*场景的处理逻辑也错误。
  • 未初始化列表:new_left_letters和new_right_letters未提前定义,运行会直接抛出NameError。
  • 未考虑多可见字母的中间约束:比如两个可见字母之间的*,需要填入两者之间的字母,原代码仅单方向对比单个字母,逻辑不完整。
  • 未排除原单词中已有的字母:示例中的d和m会被错误加入结果。
  • 重复添加字母:多个*位置允许同一个字母时,结果列表会出现重复项。

以下是修正后的代码,完全符合需求:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
word = ['*', '*', 'd', '*', '*', 'm']

# 提取单词中已有的可见字母(后续要排除这些字母)
existing_letters = set([c for c in word if c != '*'])
# 记录所有非*字母的位置和字符
non_star = [(idx, c) for idx, c in enumerate(word) if c != '*']
final_letters = []

if not non_star:
    # 全是*的情况,所有字母都可填入
    final_letters = letters.copy()
elif '*' not in word:
    # 没有空位,返回空列表
    final_letters = []
else:
    # 处理第一个非*字母左侧的*:允许填入小于该字母的字符
    first_idx, first_c = non_star[0]
    if first_idx > 0:
        for c in letters:
            if c < first_c:
                final_letters.append(c)
    
    # 处理相邻非*字母之间的*:允许填入两者之间的字符
    for i in range(len(non_star)-1):
        prev_c = non_star[i][1]
        next_c = non_star[i+1][1]
        prev_idx = non_star[i][0]
        next_idx = non_star[i+1][0]
        # 两个非*字母之间存在*才需要处理
        if next_idx - prev_idx > 1:
            for c in letters:
                if prev_c < c < next_c:
                    final_letters.append(c)
    
    # 处理最后一个非*字母右侧的*:允许填入大于该字母的字符
    last_idx, last_c = non_star[-1]
    if last_idx < len(word)-1:
        for c in letters:
            if c > last_c:
                final_letters.append(c)
    
    # 排除已有的字母、去重并排序
    final_letters = list(set(final_letters) - existing_letters)
    final_letters.sort()

print(final_letters)

代码说明

  1. 提取已有字母:用集合存储单词中的可见字母,方便后续快速排除。
  2. 分场景处理:
    • 全*场景:直接返回完整字母表。
    • 无*场景:返回空列表(没有空位可填)。
    • 混合场景:分别处理左侧、中间、右侧的有效区间,收集所有符合条件的字母。
  3. 去重与排序:通过集合去重,再排序保证结果有序。

运行示例输入,会输出:['a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:12:03