我们有一个问题,我们想对大量 [1MM - 10MM] 的字符串(“型号”)进行子字符串搜索,快速识别包含给定子字符串的任何“型号”。型号是短字符串,例如:
- ABB1924DEW
- WTW9400PDQB
- GLEW1874
目标很简单,给定一个子串,快速找到与该子串匹配的所有型号。例如(在上述型号的范围内),如果我们搜索字符串“EW”,该函数将返回 GLEW1874 和 ABB1924DEW(因为它们都包含子字符串 EW)。
数据结构还需要能够支持快速搜索以给定子字符串开头和/或以给定子字符串结尾的型号。例如,我们需要能够快速进行 WTW...B 之类的搜索(这将匹配 WTW9400PDQB,因为它以 WTW 开头并以 B 结尾)
我正在寻找的是一种内存数据结构,它可以非常有效地进行这些搜索。理想情况下,Java 中也会有一个很好的(简单的)实现,已经在我们可以使用的某个地方完成。简单(和快速)比超级复杂和稍微快一点要好。天真的算法(只是循环遍历所有零件号,对每个零件号进行子字符串搜索)对于我们的目的来说太慢了,我们正在寻找更快的东西(前提是好的)
那么,这个问题的教科书数据结构/算法是什么?