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

求解ACSL初级组练习题:找出列表单索引唯一字符

解决ACSL初级组:找出曾占据列表单个索引的唯一字符

看起来你在ACSL初级组的练习题里卡壳了——要找出所有曾占据列表单个索引的唯一字符对吧?先看看你当前代码里的问题,再一步步解决它:

你的代码问题点

  • 你初始化了idk3但全程没使用它,最后打印它的长度肯定输出0,完全没帮你追踪目标字符
  • 你的插入逻辑(idk.insert(index, i)或idk.insert(0, i))只是在修改原列表,但完全没记录哪些字符曾占据过哪个索引位置,这根本没法满足你要找“曾占据单个索引的唯一字符”的需求
  • 原列表idk初始是["C", "E", "M", "O", "P", "R", "T"],每次插入会让列表变长,但你没同步追踪索引的占用变化

核心思路

要实现需求,咱们得做这几件事:

  1. 维护一个索引占用记录,每个索引对应一个集合,记录所有曾占据过这个位置的字符
  2. 严格按照你代码里的插入规则(存在则插在当前位置前,不存在插在开头)模拟操作,每插入一个字符就同步更新索引的占用记录
  3. 最后筛选出那些只在某一个索引位置出现过,且该索引只有它自己的字符

修正后的代码实现

# 初始列表,用更清晰的变量名
initial_chars = ["C", "E", "M", "O", "P", "R", "T"]
# 字典:key是索引,value是该索引曾被哪些字符占据过(用集合去重)
index_usage = {i: {char} for i, char in enumerate(initial_chars)}
# 处理目标字符串,统一转大写并去除首尾空格
target_str = "computer".upper().strip()

for char in target_str:
    if char in initial_chars:
        # 找到字符当前在列表中的索引
        current_idx = initial_chars.index(char)
        # 在该索引位置插入字符,原位置及之后的元素后移
        initial_chars.insert(current_idx, char)
        # 更新索引占用记录:插入后,原current_idx及之后的索引都要+1,然后给新的current_idx添加当前字符
        new_index_usage = {}
        for idx in index_usage:
            if idx < current_idx:
                new_index_usage[idx] = index_usage[idx]
            else:
                new_index_usage[idx + 1] = index_usage[idx]
        # 记录新插入位置的字符
        new_index_usage[current_idx] = {char}
        index_usage = new_index_usage
    else:
        # 字符不在初始列表,插入到开头
        initial_chars.insert(0, char)
        # 更新索引占用记录:所有原有索引+1,新增索引0记录当前字符
        new_index_usage = {0: {char}}
        for idx in index_usage:
            new_index_usage[idx + 1] = index_usage[idx]
        index_usage = new_index_usage

# 筛选目标字符:那些只出现在一个索引位置,且该索引只有它的字符
unique_single_index_chars = set()
# 先收集每个字符对应的所有索引位置
char_to_indices = {}
for idx, chars in index_usage.items():
    for c in chars:
        if c not in char_to_indices:
            char_to_indices[c] = set()
        char_to_indices[c].add(idx)

# 找出只对应一个索引的字符,且该索引只有它自己
for char, indices in char_to_indices.items():
    if len(indices) == 1:
        idx = next(iter(indices))
        if len(index_usage[idx]) == 1:
            unique_single_index_chars.add(char)

print("曾占据单个索引的唯一字符:", unique_single_index_chars)
print("这类字符的数量:", len(unique_single_index_chars))

代码说明

  • 索引占用记录:用index_usage字典跟踪每个索引的历史字符,确保每一次插入操作都同步更新索引的变化(因为插入会导致后续索引移位)
  • 字符与索引的映射:最后通过char_to_indices统计每个字符出现过的所有索引,筛选出只出现在一个索引且该索引只有它的字符,这就是你要找的目标
  • 测试结果:运行代码后,处理COMPUTER会得到{'U'},数量是1——因为只有U是插入到开头后,后续没有其他字符插入到它的位置,所以它只占据过索引0这一个位置,且该索引只有它自己

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:19:28