String 如何在表格中查找单词?

String 如何在表格中查找单词?,string,algorithm,language-agnostic,data-structures,String,Algorithm,Language Agnostic,Data Structures,这是一个编码练习。假设有一个字母表和一些单词。我必须找到单词在表格中的位置。一个单词可以从表格中的任何地方开始,可以是垂直的,也可以是水平的。(我们可以假设一行/一列只能包含一个单词) 例如: table = xabcx xxxdx xxfex words = ["abc", "edc", "fe"] expected output is (0,1), (2,3), (2,2) 表=xabcx xxxdx xxfex 单词=[“abc”、“edc”、“fe”]

这是一个编码练习。假设有一个字母表和一些单词。我必须找到单词在表格中的位置。一个单词可以从表格中的任何地方开始,可以是垂直的,也可以是水平的。(我们可以假设一行/一列只能包含一个单词)

例如:

table = xabcx xxxdx xxfex words = ["abc", "edc", "fe"] expected output is (0,1), (2,3), (2,2) 表=xabcx xxxdx xxfex 单词=[“abc”、“edc”、“fe”] 预期产量为(0,1)、(2,3)、(2,2)
简单的解决方案是在所有行/列上循环,并检查每一行/列是否包含任何单词。它需要
O(列数*行数*字数*字长)
。有更好的解决办法吗?也许我应该预处理单词列表以构建更高效的数据结构?

我建议表采用二叉树结构。这基本上是大多数主要关系数据库系统所使用的。在这种情况下,您可以基于从单词创建的一些整数哈希代码来平衡树。然后在搜索时,从搜索词创建一个哈希,并智能地遍历树,直到找到匹配的行。

您可以使用Trie数据结构来存储表。一旦有了Trie,查找单词就很容易了。

这里有一个简单的方法

你只是在寻找精确的匹配,所以我认为你应该马上考虑基于散列的算法,而不是基于树的算法。首先考虑一个哈希图,它把字母表中的每一个字母与它在表中的位置联系起来。现在,对于每个单词,请查看第一个字母,然后遍历表格(左、右、上、下),查看整个单词是否存在

您可以通过为每个方向(左、右、上、下)的每两个字母组合(仅676个键)创建哈希映射来改进这一点。现在,您首先检查单词的前两个字母,哈希映射会立即给出这两个字母所在的位置。现在,您可以继续朝该方向查看表格,以查看单词是否已完成。或者,您可以选择单词的下两个字母,并查看该字母对是否存在与第一个字母对相邻且方向相同的位置

你可以进一步改进这个。。。通过考虑每个方向每三个字母组合的哈希映射。您应该能够在存储需求和性能之间找到一个良好的平衡,这是基于平均字长之类的启发式方法。

在每一列/行上使用只需要O(
列数*行数+模式长度+输出匹配数)