我有一组固定的未知模式字符串,它使用通配符*
和?
(?
=一个字符,*
=零个或多个字符)。例如:
"abcd?"
"dogcat*"
"*car"
"hello*world"
我想从这些模式中生成一些数据结构,它有一个名为findPattern
的方法。该方法接受一个字符串,该字符串保证最多匹配其中一个模式,并返回字符串匹配的模式(如果有)。
在上面的例子中:
findPattern("abcde")
返回"abcd?"
findPattern("hellocar")
返回"*car"
findPattern("edbca")
返回null
保证"dogcatfrogcar"
之类的字符串不会作为此方法的输入。
构建数据结构可能很慢,因为模式集只给出一次。该函数将在同一模式集上为许多字符串调用,因此需要高效。
我如何实现这一目标?
P.S。我是编程语言不可知论者
答案 0 :(得分:1)
Aho-Corasic算法旨在在文本中找到多个模式。幸运的是,it is possible to work with '?' wildcards(单个符号)和"如果通配符的数量受常量限制,带有通配符的模式可以在线性时间内匹配"
答案 1 :(得分:0)
我们可以用正则表达式替换每个模式,并尝试解决更普遍的问题。
在那种情况下,我找到了有趣的方法: