华为OD机试真题 新系统 2026-07-19 Python&JS 实现【酒店服务记录分析】
目录
题目
题目内容:
你是某连锁酒店的数据分析师。
酒店每天都会用一串编码记录各分店收到的服务请求类型。
编码由小写字母 a 到 z 组成,每个字母代表一种特定类型的服务请求。
为了优化资源分配,总部需要找出当天内重复出现的服务类型。
重复服务类型需要按照它们首次出现的时间顺序生成报告。
给定服务记录字符串 record,请找出所有出现超过一次的服务类型。
如果没有服务类型重复出现,返回空列表。
输入描述:
输入为一个字符串 record,仅包含小写字母 a 到 z。
输出描述:
输出一个列表,包含所有出现超过一次的服务类型编号。
结果按照服务类型首次出现的顺序排列。
若无重复类型,输出空列表。
输出格式为 JSON 风格列表,元素使用英文双引号包裹,多个元素之间使用英文逗号分隔,逗号后不加空格。
样例 1
输入:
programming
输出:
["r","g","m"]
说明:
r、g、m 都出现超过一次,按首次出现顺序输出。
样例 2
输入:
hello
输出:
["l"]
说明:
只有 l 重复出现。
样例 3
输入:
abcde
输出:
[]
说明:
所有服务类型都只出现一次。
思路
整体思路:先统计每个字符的总次数,再按原字符串顺序收集重复字符。
第一步:遍历 record,统计 26 个小写字母的出现次数。
第二步:再次从左到右扫描 record,判断当前字符总次数是否大于 1。
第三步:如果当前字符重复且尚未加入结果,则加入答案并标记已加入。
第四步:按题目指定的 JSON 风格列表格式输出。
边界处理:没有重复字符时答案列表为空,输出 []。
复杂度分析:字符串扫描两次,时间复杂度为 O(n),字符集固定,空间复杂度为 O(1)。
Code
import sys
record = sys.stdin.read().strip()
# 只有小写字母,固定 26 长度数组比哈希表更直接。
freq = [0] * 26
for ch in record:
# 先统计总次数,后续才能判断是否重复。
freq[ord(ch) - 97] += 1
added = [False] * 26
ans = []
# 第二次扫描保留原字符串顺序,第一次遇到重复类型就输出。
for ch in record:
idx = ord(ch) - 97
# 第一次遇到重复服务类型时加入,顺序自然是首次出现顺序。
if freq[idx] > 1 and not added[idx]:
ans.append(ch)
added[idx] = True
# 输出要求是 JSON 风格列表,元素之间没有空格。
# 手动拼接以满足逗号后不加空格的输出要求。
print("[" + ",".join(f'"{ch}"' for ch in ans) + "]")
JS
const fs = require("fs");
const record = fs.readFileSync(0, "utf8").trim();
// 服务类型只有 26 个小写字母,用数组计数即可。
const freq = Array(26).fill(0);
for (const ch of record) {
// 先统计每种服务类型出现次数。
freq[ch.charCodeAt(0) - 97]++;
}
// added 保证每种重复服务类型只输出一次。
const added = Array(26).fill(false);
const ans = [];
for (const ch of record) {
const idx = ch.charCodeAt(0) - 97;
// 第一次遇到重复类型时加入答案。
if (freq[idx] > 1 && !added[idx]) {
ans.push(ch);
added[idx] = true;
}
}
// 输出 JSON 风格列表,元素间不带空格。
// 手动生成 JSON 风格列表,避免默认数组输出带空格或单引号。
console.log(`[${ans.map(ch => `"${ch}"`).join(",")}]`);
【华为od机试真题Python+JS+Java+Go合集】【超值优惠】:Py/JS/Java/Go合集
【华为od机试真题Python】:Python真题题库
【华为od机试真题JavaScript】:JavaScript真题题库
【华为od机试真题Java&Go】:Java&Go真题题库
【华为od机试真题C++】:C++真题题库
【华为od机试真题C语言】:C语言真题题库
【华为od面试手撕代码题库】:面试手撕代码题库
【华为od机试面试交流群】【文章底部有二维码链接,可扫码加交流群】

华为OD机试:二本院校有机会吗? 有机会,但不大,大神除外!机考分数越高越好,所以需要提前刷题。机考通过后,如果没有收到面试邀请,也不要着急,非目标院校面试邀请发的时间比较晚。非目标院校今年有点难,机试至少要考到350分,所以需要疯狂刷题,华为OD机考是有题库的,最好在考前完所有题库题目。华为OD机试:跨专业可以参加华为OD可以,但是如果你的本科院校比较差,上岸概率不大。华为OD机试:华为OD简历被锁定机试通过,性格测试也通过,但是没人联系面试,发现简历被锁定。此时需要主动去联系HR。让他帮助你查询原因。
更多推荐



所有评论(0)