首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最大可能的长方形字母

最大可能的长方形字母
EN

Stack Overflow用户
提问于 2011-12-14 21:50:34
回答 2查看 3.1K关注 0票数 11

编写了一个程序来查找最大的字母矩形,这样每一行都形成一个单词(从左到右),每个列形成一个单词(从上到下)。

我发现了这个有趣的问题。这不是家庭作业,虽然听起来可能是这样的。(我不在学校)。我这么做是为了好玩。

示例

从猫、汽车、猿、api、rep、提示中,我们得到了以下矩形(这是一个正方形):

C a r a p=p

我最初的想法是构建某种前缀树,这样我就可以检索以特定字符串开头的所有单词。这将是有用的,当我们已经有2个或更多的单词(要么阅读从上到下或左到右),我们需要找到下一个单词添加。

还有其他想法吗?

编辑

这能用长方体(三维矩形)来完成吗?

如果它需要在对角线上有有效的单词(idea信用:user645466),那么它的algo将如何被优化呢?

EN

回答 2

Stack Overflow用户

发布于 2011-12-14 23:26:13

给定长度的单词字典,创建两个新的词典:第一个词典包含所有单词的单个字母前缀(所有字母都可以是给定长度的单词的第一个字母),第二个词典包含所有单词的双字母前缀(两个字母的所有序列都可以是给定长度的单词的前两个字母)。您也可以做三重前缀,但您可能不需要超越这一点。

  1. 从字典中选择一个单词,叫它X。这将是矩阵的第一行。
  2. 使用您所做的方便的列表检查X[1], X[2], ..., X[N]是否都是有效的单个字母前缀。如果是,继续执行步骤3;否则返回步骤1。
  3. 从字典中选择一个单词,命名为Y。这将是矩阵的第二行。
  4. 检查X[1] Y[1]X[2] Y[2]、.、X[N] Y[N]都是有效的双字母前缀。如果是,那么继续步骤5;否则回到步骤3。如果这是字典中的最后一个单词,那么就一直返回到步骤1。

..。

2(N-1)。从字典中选择一个单词,叫它Z。这将是矩阵的第N行。

2N.检查X[1] Y[1] ... Z[1]X[2] Y[2] ... Z[2],.,X[N] Y[N] ... Z[N]都是字典中的单词。如果是的话,恭喜你,你做到了!否则,返回到步骤2(N-1)。如果这是字典中的最后一个词,那么就一直回到步骤2(n-3)。。

其逻辑是一次生成一行单词的矩形,为行选择单词,然后检查列是否可以对单词完成。这比一次加一个字母要快得多。

票数 1
EN

Stack Overflow用户

发布于 2014-06-10 19:19:18

为相同长度=索引的单词创建一个Bag[],然后创建一个尝试数组,每个长度的wordList创建一个Trie

代码语言:javascript
运行
复制
   Rectangle makeRectangle(length, height, rectangle)
    {
        if ( length == rectangle.length()) check if complete and return;
        checkIfPartialComplete - check columns for valid prefixes
        for ( i from 1 to grouplist[i-1])
        {
            newRectangle = append word[i] to rectangle 
            return makeRectangle(l,h, rectangle with appended word) if not equal to null
        }
    }


boolean checkPartial(int l, Trie trie)
{
    for ( int i =0 ; i < l; i++)
    {
        String col = getColumn(i);
        if (!trie.contains(col))
        {
            return false;
        }
    }
    return true;
}
boolean checkComplete(int l, Bag<String> lengthGroup)
{
    for ( int i=0; i < l ; i++)
    {
        String col = getColumn(i);
        if (!lengthGroup.contains(col))
        {
            return false;
        }
    }
    return true;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8512174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档