请用 JavaScript 编写一个函数,找出给定文章中频次最高的单词,并返回该单词及其出现次数。要求给出具体代码实现。
考察说明
考查候选人能否用 JavaScript 解决实际文本处理问题,重点考察字符串处理、正则表达式、对象或 Map 的使用以及基本算法思维。
回答思路
- 【回答框架 1】首先明确需求:输入是字符串,输出是出现频率最高的单词和次数。需要明确大小写是否敏感,一般处理为仅保留字母字符,并转为小写统一比较。
- 【回答框架 2】使用正则表达式 /[a-zA-Z]+/g 提取所有单词,进行小写化。然后遍历数组,用 Map 对象统计每个单词出现次数,避免使用普通对象以支持非字符串键名。
- 【回答框架 3】记录最高频单词:遍历 Map 或统计过程中同时记录当前最大值对应的单词。若多个单词频率相同,可选择第一个达到最高频率的单词,或按要求返回所有最高频单词。
- 【回答框架 4】边界处理:空字符串返回 null;包含数字、标点符号时过滤;考虑 Unicode 字符可用 /[\p{L}]+/gu 以支持更广泛语言。
- 【回答框架 5】复杂度分析:时间复杂度 O(n),空间复杂度 O(n),n 为字符总数。提供简洁代码示例。
- 【关键点 1】使用正则提取单词并统一小写
- 【关键点 2】用 Map 或对象统计频率并记录最大值
- 【关键点 3】处理空输入和大小写不敏感情况
- 【关键点 4】时间复杂度 O(n),空间复杂度 O(n)
- 【易错点 1】未考虑标点符号和大小写导致统计不准确
- 【易错点 2】使用普通对象时,单词可能覆盖原型属性如 'constructor'
- 【易错点 3】未处理多个单词并列最高频的情况