- 有一个英文单词库(数组),里面有几十万个英文单词
- 输入一个字符串,快速判断是不是某一个单词的前缀
- 说明思路,不用写代码
常规思路
- 第一,遍历单词库数组
- 第二,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个英文字母),考虑使用哈希表(对象)
- 以空间换时间,定义数据结构很重要