[英]What is the best approach for time & space complexity for string word reversal
[英]Best approach to solve Word Chain
我试图在CodeEval中解决这个问题。
在这个挑战中,我们建议你玩已知的游戏“单词链”,其中玩家提出以前一个单词结束的字母开头的单词。 挑战在于确定可以从单词列表创建的链的最大长度。
例:
Input:
soup,sugar,peas,rice
Ouput:
4
说明:我们可以形成一个包含4个字的链:“汤 - >豌豆 - >糖 - >米”。
约束:
我的尝试 :我的方法是将单词建模为图形,这样输入中的每个单词代表一个节点,如果wordi的最后一个字符等于wordj的第一个字符,则在wordi到wordj之间有一个(有向)边缘。
之后,我从每个节点运行bfs并从该节点计算最远节点的长度。 最终结果是所有节点可能的最大值。
但这种方法并没有给我一个满分。 因此,我的问题是如何正确有效地解决这个问题?
因为我的声誉不到50,所以我不能发表评论......
如果word的总数小于20,我们可以使用动态编程和位掩码来解决。 make dp [20] [1 << 20]。 dp [i] [j]表示你现在在i,你访问了bitmask j的单词。
对于数字大于20,我仍然没有一个好主意。 也许我们需要使用一些随机算法,也许....
我的想法是使用dfs并添加一些优化,因为35不是太大。 我认为这足以解决问题。
请参阅此处提到的解决方案: 检测何时可以进行矩阵乘法
解决问题的方法几乎相同。 创建有向图,以便为每个工作添加从第一个字母到最后一个字母的边。
然后在该图中找到Euler路径( http://en.wikipedia.org/wiki/Euler_path )。
编辑:我看到你不能保证使用所有单词,你需要图中最长的路径( http://en.wikipedia.org/wiki/Longest_path_problem )。 这个问题是NP完全的。
该页面提供了Core Java的解决方案,它遵循以下过程:
还有另一种使用Map / reduce hadoop框架的方法, 使用map-reduce在单词链中详细提到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.