算法:JS如何实现高效的英文单词前缀匹配

121 阅读1分钟
  • 有一个英文单词库(数组),里面有几十万个英文单词
  • 输入一个字符串,快速判断是不是某一个单词的前缀
  • 说明思路,不用写代码

常规思路

  • 第一,遍历单词库数组
  • 第二,indexOf判断前缀
  • 实际时间复杂度超过了O(n),因为要考虑indexOf的计算量

优化

  • 英文字母一共26个,可以提前把单词库数组拆分成26个
  • 既然第一层拆分为26个,第二、第三层。。。还可以继续分
  • 最后把单词库拆分成一棵树
  • 可以将O(n) 将为O(m) (m为所查询单词的字母数)【array这个单词为例,可以O.a.r.r.a.y 获取(O是定义的哈希表【即对象】)】
  • 代价是将数组变成树

性能分析

  • 如遍历数组,时间复杂度至少O(n)起步(n是数组长度)
  • 而改为树,时间复杂度降低到O(m) (m是单词长度)
  • PS: 哈希表(对象)通过key查询,时间复杂度是O(1)

划重点

  • 考虑优化原始数据结构(需和面试官沟通确认)
  • 有明确范围的数据(如26个英文字母),考虑使用哈希表(对象)
  • 以空间换时间,定义数据结构很重要