大约有10万个字符串-前缀,现在我们需要知道给定的字符串是否与这些前缀之一匹配。例如,前缀为:
12
123
1234
12345
现在给定的字符串是123abc,它将与“ 123”前缀匹配; 如果给定的字符串为12340098,则它将与“ 1234”前缀匹配。
由于有100K前缀,因此我们需要一种非常快速的匹配方式,如何使用C ++来实现它?
答案 0 :(得分:4)
我认为您正在寻找trie数据结构,该数据结构针对以下形式的查询进行了优化:“给定字符串的这些字符串前缀中的任何一个?”或“给定的字符串是否是其他任何字符串的前缀?” (这与@Sam Varshavchik在评论中提到的确定性有限自动机有关,尽管这种联系需要一点CS理论才能完全理解。)
有很多方法可以在C ++中实现特里。我建议您先阅读数据结构以更好地了解其工作原理,然后使用它来指导您的实现。如果在编写代码时遇到一些问题,请随时发布后续问题。