**酒店服务记录分析**

2026 华为OD机试真题 7月19日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

你是某连锁酒店的数据分析师,酒店每天都会用一串编码记录各分店收到的服务请求类型,编码由小写字母组成 [a-z],每个字母代表一种特定类型的服务请求(如 a-客房清洁、b-设备维修、c-餐饮服务等等)。为了优化资源分配,总部需要找出在当天内重复出现的服务类型,并按照它们首次出现的时间顺序生成报告。

现在给定一个服务记录字符串 record(仅包含小写字母 a-z),请找出所有出现超过一次的服务类型,并将这些服务类型按照它们在记录中第一次出现的顺序放入结果列表中,如果没有服务类型重复出现,返回空列表。

2026 华为OD机试真题 7月19日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

补充说明

备注:结果只列出符合条件的服务类型的编号 a-z,编号的顺序按照第一次出现的顺序排列。

输入描述

输入为一个字符串 record,仅包含小写字母 a-z。

输出描述

输出为一个列表,包含所有出现超过一次的服务类型的编号(a-z),按首次出现的顺序排列;若无重复类型,输出空列表。

输出格式为 JSON 风格列表:元素使用英文双引号包裹,多个元素之间使用英文逗号分隔,逗号后不加空格。

示例1

输入

programming

输出

["r","g","m"]

说明

记录中 r 出现 2 次,首次出现在位置 2;g 出现 2 次,首次出现在位置 4;m 出现 2 次,首次出现在位置 7。按首次出现顺序排列为:r、g、m。

示例2

输入

hello

输出

["l"]

说明

只有 l 类型重复出现(第 3 和第 4 次请求),首次出现在位置 3。

示例3

输入

abcde

输出

[]

说明

所有服务类型都只出现一次,返回空数组。

解题思路

核心思想

先统计每个字母在记录中出现的次数,然后再次从左到右扫描原字符串。某个字母如果总次数大于 1,说明它是重复服务类型;但结果中每种类型只能出现一次,所以还需要记录已经加入答案的字母。

第二次扫描沿用原字符串顺序,因此第一次遇到重复字母时加入答案,就天然满足“按首次出现顺序排列”的要求。

算法步骤

  1. 读取服务记录字符串 record
  2. 统计每个字符出现次数。
  3. 准备答案列表和已加入标记。
  4. 从左到右遍历 record
    • 若当前字符总出现次数大于 1;
    • 且当前字符还没有加入过答案;
    • 则将该字符加入答案。
  5. ["a","b"] 的列表格式输出;若答案为空,输出 []

复杂度分析

设字符串长度为 n

时间复杂度:O(n),统计一次、扫描一次。

空间复杂度:O(1),字符集固定为 26 个小

THE END