Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 与点匹配的字符串_String_Algorithm_Pattern Matching - Fatal编程技术网

String 与点匹配的字符串

String 与点匹配的字符串,string,algorithm,pattern-matching,String,Algorithm,Pattern Matching,我需要设计一个数据结构,我可以有效地添加新词(字符串)和搜索现有的词。此外,搜索词中可以包含与任何字符匹配的“.”。例如,如果我添加字符串“abcd”和“abed”,则搜索“ab.d”时应返回这两个字符串 我尝试使用前缀尝试来解决这个问题。它适用于普通字符串搜索(没有点),但对于点,我必须搜索节点的每个子节点。有没有更有效的方法来解决这个问题?我相信这是一个面试问题(因为我在过去的一次面试中遇到了这个问题)。还有一些其他的方法有不同的折衷,但是对于面试问题来说,任何超出前缀树(Trie)的方法都

我需要设计一个数据结构,我可以有效地添加新词(字符串)和搜索现有的词。此外,搜索词中可以包含与任何字符匹配的“.”。例如,如果我添加字符串“abcd”和“abed”,则搜索“ab.d”时应返回这两个字符串


我尝试使用前缀尝试来解决这个问题。它适用于普通字符串搜索(没有点),但对于点,我必须搜索节点的每个子节点。有没有更有效的方法来解决这个问题?

我相信这是一个面试问题(因为我在过去的一次面试中遇到了这个问题)。还有一些其他的方法有不同的折衷,但是对于面试问题来说,任何超出前缀树(Trie)的方法都过于工程化。只需构建一个包含所有给定单词的trie,并在trie上搜索任何查询单词。在任何时候,遇到点时,搜索该节点中所有可能的子节点,并通过匹配后面的字符继续进一步搜索。就是这样。

当你遇到一个
,在那个Trie节点上应用DFS。跨站点问题:@hiimdaosui这似乎是OP已经想到的。一般来说,它应该可以工作,但如果通配符太多或分支因子太高,则可能不可行。可能重复:。另请参见:。虽然更新成本很高,但仍可以工作。但是,您可以拥有包含要添加的单词的二级结构,并在后台线程上构建新的GST。因此,查询将搜索现有的GST,并使用效率较低的方法搜索待处理的单词。