实现最大可能的字母矩形

时间:2015-03-22 21:00:29

标签: matrix backtracking trie

  

给出一个包含数百万字的字典,给出一个算法来找到最大可能的字母矩形,这样每行形成一个单词(从左到右阅读),每一列形成一个单词(从上到下阅读)。

我在stackoverflow上找到了一个非常好的解决方案here。基本上,在构造Trie之后,我使用回溯将所有可能的后缀放入矩阵中,直到找到有效的后缀。但是,我仍然坚持如何编写回溯部分。

考虑我在我的矩阵中加了'a','a'有3个孩子'b','c'和'd'。

a * ? ?
* ? ? ? 
? ? ? ?
? ? ? ?

所以我需要将'b'放入矩阵并检查'b'的孩子。如果它不起作用,我需要删除一个'b'并将'c'放入矩阵,依此类推。所以它应该是这样的:

a * ? ?           a b * ?                                     a b * ?
* ? ? ?     ->    b * ? ?     (if anything doesn't work) ->   c * ? ? 
? ? ? ?           * ? ? ?                                     * ? ? ?
? ? ? ?           ? ? ? ?                                     ? ? ? ?

我该如何实现? 谢谢。

1 个答案:

答案 0 :(得分:0)

好吧,我仍然无法找到解决办法,但我还有另一个血腥残忍的解决方案。它仍然是一个回溯,它仍然需要特里。基本上,我将所有需要形成列的字符串放入Trie中。在行集中添加每个字符串,检查列中形成的每个前缀是否包含在Trie中,否则,继续,否则,递归添加行字符串,直到找到矩阵。请查看我的blog了解详情,如果您有任何疑问,请与我们联系。