**日志关键词统计**

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

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

题目描述

给定日志字符串数组 logs 和关键词数组 keywords,统计每个关键词在所有日志中出现的总次数,并找出经常一起出现的关键词组合(至少在 2 条日志中同时出现)。

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

注意

  1. 关键词匹配大小写不敏感,完整单词匹配(不能是部分匹配)
  2. 单词边界:空格、标点符号(逗号、句号、感叹号、问号、分号、冒号)或字符串首尾,英文标点,无中文标点
  3. 关联组合:两个关键词在至少 2 条不同日志中同时出现才算"经常关联"
  4. 返回结果:前 keywords.length 个元素为关键词出现次数,后续元素每两个一组表示关联组合索引(索引小的在前,索引大的在后);多个组合时先按第一个索引升序,再按第二个索引升序

数据规模

1≤logs.length ≤1000,1≤keywords.length ≤100,每条日志长度 ≤1000 字符

输入描述

日志字符串数组 logs 和关键词数组 keywords

输出描述

经常一起出现的关键词组合

示例1

输入

Error in system,warning: error detected,No errors found
error,warning

输出

2,1

说明

关键词统计:error 出现 2 次,warning 出现 1 次

关联分析:error 和 warning 只在第 2 条日志中同时出现 1 次,未达到至少 2 次共现的标准,因此无关联组合输出

示例2

输入

Error: system failure,Warning: error in network,System error detected again,Network warning error found
error,system,warning,network

输出

4,2,2,2,0,1,0,2,0,3,2,3

说明

关键词统计:error 出现 4 次,system 出现 2 次,warning 出现 2 次,network 出现 2 次 关联组合:

  • (error,system):在第 1、3 条日志中同时出现,共现 2 次 → 输出 [0,1]
  • (error,warning):在第 2、4 条日志中同时出现,共现 2 次 → 输出 [0,2]
  • (error,network):在第 2、3、4 条日志中同时出现,共现 3次 → 输出 [0,3]
  • (warning,network):在第 2、4 条日志中同时出现,共现 2 次 → 输出 [2,3] 最终结果:统计次数 [4,2,2,2] + 关联组合索引 [0,1,0,2,0,3,2,3]

示例3

输入

Error in module A,Module error B error,Error module C error,Module error D
error,module

输出

6,4,0,1

说明

关键词统计:error 出现 6 次(第 1 条 1 次,第 2 条 2 次,第 3 条 2 次,第 4 条 1 次),module 出现 4 次

关联组合:(error,module)在第 1、2、3、4 条日志中都同时出现,共现 4 次 → 输出 [0,1] 最终结果:统计次数 [6,4] + 关联组合索引 [0,1]

示例4

输入

Test log one,Test log two,Test log three
test,log,one,two,three

输出

3,3,1,1,1,0,1

说明

关键词统计:test 出现 3 次,log 出现 3 次,one 出现 1 次,two 出现 1 次,three 出现 1 次

关联组合:(test,log)在第 1、2、3 条日志中都同时出现,共现 3 次 → 输出 [0,1]

其他关键词组合未达到 2 次共现标准

最终结果:统计次数 [3,3,1,1,1] + 关联组合索引 [0,1]

解题思路

本题需要解决两个核心问题:关键词计数关联组合发现

1. 关键词计数

  • 大小写不敏感:所有文本和关键词统一转为小写进行比较
  • 完整单词匹配:使用正则表达式 [\s,.!?;:]+ 将日志切分为单词,只匹配完整单词,不做子串匹配
  • 统计方法:遍历切分后的单词列表,累加每个关键词的出现次数

2. 关联组合发现

  • 预处理优化:将每条日志中出现过的关键词用集合(Set)记录,便于快速判断
  • 共现判断:对于每一对关键词 (i, j),遍历所有日志,检查该对关键词同时出现的次数
  • 过滤条件:只有共现次数 >= 2 的关键词对才被保留

3. 结果组织

  • 前 N 个元素为每个关键词的出现次数
  • 后续元素每两个一组,代表一个满足条件的关联组合(索引小的在前)

复杂度分析

  • 时间复杂度:O(L + K N + K² L)
    • L 为日志总数,K 为关键词数量
    • 单词切分和计数 O(L)
    • 关联组合枚举 O(K² * L)
  • 空间复杂度:O(L + K + K²) 用于存储切分结果、计数数组和关
THE END