【发布时间】:2013-07-14 17:38:45
【问题描述】:
我有一组固定的未知模式字符串,它们使用通配符 * 和 ?(? = 一个字符,* = 零个或多个字符)。例如:
"abcd?""dogcat*""*car""hello*world"
我想从这些模式中生成一些数据结构,它有一个名为findPattern 的方法。该方法接受一个保证最多匹配一个模式的字符串,并返回该字符串匹配的模式(如果有的话)。
在上面的例子中:
-
findPattern("abcde")返回"abcd?" -
findPattern("hellocar")返回"*car" -
findPattern("edbca")返回null
保证不会将"dogcatfrogcar" 等字符串作为此方法的输入。
构建数据结构可能会很慢,因为模式集只给出一次。该函数将被同一模式集上的许多字符串调用,因此它需要高效。
我如何做到这一点?
附:我是编程语言不可知论者
【问题讨论】:
-
我有点没时间详细说明,但您需要创建一个非确定性有限自动机。假设一个具有 n 个字符的模式和一个具有 m 个字符的字符串,您可以直接对您的字符串运行它,每个字符串的成本为 O(n*m),或者将其转换为具有 O(2^n) 的确定性有限自动机状态,但匹配成本为 O(m)。
-
是的,这似乎是正确的方向。你知道任何实现类似功能的库吗?
标签: string data-structures language-agnostic pattern-matching wildcard