1. 题目背景与核心需求解析
这道"找位置"题目源自华中科技大学计算机考研复试机试题库,属于典型的字符串处理类编程题。作为考研复试环节的机试题目,其设计意图非常明确:考察考生对字符串基础操作的熟练程度、边界条件处理能力以及算法实现效率的把控。
1.1 题目具体要求还原
根据多年辅导经验,这类题目通常要求:
- 给定一个由字母和数字组成的字符串
- 找出所有出现次数大于1的字符
- 按字符在字符串中的出现顺序,输出每个重复字符及其所有位置索引
- 位置索引从0开始计数
- 输出格式为"字符:位置1,位置2,..."
例如输入"abca",输出应为:
a:0,3
1.2 考察的核心能力维度
这道题看似简单,实则暗藏多个考察点:
- 字符串遍历能力:需要熟练掌握字符串的索引访问和迭代
- 数据结构应用:合理选择字典/哈希表等结构存储位置信息
- 输出格式控制:精确控制逗号分隔和冒号格式
- 边界情况处理:空字符串、无重复字符等特殊情况
- 时间复杂度优化:避免O(n²)的暴力解法
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路与算法设计
2.1 基础解法:哈希表记录法
最直观的解法是使用哈希表(字典)记录每个字符的所有出现位置:
python复制def find_positions(s):
from collections import defaultdict
char_dict = defaultdict(list)
for idx, char in enumerate(s):
char_dict[char].append(idx)
result = []
for char in s:
if len(char_dict[char]) > 1:
# 去重处理,避免同一字符多次输出
if f"{char}:{','.join(map(str, char_dict[char]))}" not in result:
result.append(f"{char}:{','.join(map(str, char_dict[char]))
