String 查找给定字符串与模式列表中的哪一个匹配
我有一组固定的未知模式字符串,它们使用通配符String 查找给定字符串与模式列表中的哪一个匹配,string,data-structures,language-agnostic,pattern-matching,wildcard,String,Data Structures,Language Agnostic,Pattern Matching,Wildcard,我有一组固定的未知模式字符串,它们使用通配符*和?(?=一个字符,*=零个或多个字符)。例如: “abcd?” “狗猫*” “*汽车” “你好*世界” 我想从这些模式中生成一些数据结构,它有一个名为findPattern的方法。该方法接受一个保证最多匹配一个模式的字符串,并返回该字符串匹配的模式(如果有) 在上述示例中: findPattern(“abcde”)返回“abcd?” findPattern(“hellocar”)返回“*car” findPattern(“edbca”)返回n
*
和?
(?
=一个字符,*
=零个或多个字符)。例如:
“abcd?”
“狗猫*”
“*汽车”
“你好*世界”
findPattern
的方法。该方法接受一个保证最多匹配一个模式的字符串,并返回该字符串匹配的模式(如果有)
在上述示例中:
返回findPattern(“abcde”)
“abcd?”
返回findPattern(“hellocar”)
“*car”
返回findPattern(“edbca”)
null
“dogcatfrogcar”
之类的字符串保证不会作为此方法的输入提供
构建数据结构可能很慢,因为模式集只给出一次。该函数将针对同一模式集上的多个字符串调用,因此它需要高效
我如何做到这一点
另外,我是编程语言不可知论者。Aho Corasic算法旨在发现文本中的多种模式。幸运的是,(单个符号),以及“如果通配符的数量以常数为界,则具有通配符的模式可以在线性时间内匹配”我们可以用正则表达式替换每个模式,并尝试解决更一般的问题 在这种情况下,我发现了一些有趣的方法:
我有点没时间详细阐述了,但您需要的是创建一个非确定性有限自动机。假设一个模式有n个字符,一个字符串有m个字符,你可以直接对你的字符串运行它,每个字符串的代价是O(n*m),或者将它转换成一个具有O(2^n)状态的确定性有限自动机,但匹配的代价是O(m)。是的,这似乎是正确的方向。你知道有实现类似功能的库吗?+1-这是一个好主意,但对于手头的问题来说太有限了。