在2D矩阵中排列3个字母的单词,使每行,列和对角线形成一个单词

Sac*_*hin 11 string algorithm dictionary

您将获得一个包含3个字母单词的字典,并且必须找到3x3的矩阵,以便每个行,列和对角线在字典中形成一个单词.字典中的单词已排序,您可以假设O(1)时间从字典中检索单词.

这被问到Facebook面试问题.

Pen*_*One 5

我的方法是首先过滤字典以创建两个新词典:第一个包含单词的所有单个字母前缀(其中可能有26个),第二个包含单词的所有双字母前缀(其中少于26 ^ 2因为没有单词以BB开头,例如).

  1. 从词典中选择一个单词,然后调用它X.这将是矩阵的第一行.

  2. 检查X1,X2,X3都使用得心应手名单你做有效的单字母前缀.如果是,继续第3步; 否则回到第1步.

  3. 从词典中选择一个单词,然后调用它Y.这将是矩阵的第二行.

  4. 检查X1 Y1,X2 Y2,X3 Y3都使用得心应手名单你做有效的双字母前缀.如果是,继续第5步; 否则回到第3步.如果这是字典中的最后一个字,那么一直回到第1步.

  5. 从词典中选择一个单词,然后调用它Z.这将是矩阵的第三行.

  6. 检查X1 Y1 Z1,X2 Y2 Z2,X3 Y3 Z3在字典中的所有单词.如果他们是,恭喜,你已经做到了!否则返回步骤5.如果这是字典中的最后一个字,那么一直回到第3步.

我在Maple中编写了这个代码并且它运行得相当好.我让它运行以找到所有这些矩阵,事实证明,由于内存溢出,有足够的崩溃Maple.