通过一次向输入字符串添加一个字符可以形成的最长字符串

时间:2017-09-26 07:57:20

标签: java string dictionary longest-substring

所以我最近在接受采访时得到了这个问题:

给定一个字典和一个起始字符串,你可以通过在输入字符串的前后添加一个字符来形成最长的单词,每个新单词也必须出现在字典中?

Ex:input ='at'Dict = {hat,chat,chats,rat,tat,tats,chatats}

返回'聊天',因为:at - >帽子 - >聊天 - >聊天

我想到了一个解决方案,我们强行并尝试将a-z中的所有字母添加到输入字符串的正面和背面,如果存在新的字符串,那么我们将26个字母强行前后再次使用,最终得到最后的字符串。

我想知道是否有一种更有效的方法来解决这个问题,而不是每次强制所有26个字母前后都强行解决?

我想到的一种方法是通过字典,如果输入字符串作为任何条目的子字符串存在,其长度大于改变输入字符串的长度,则从条目字符串中删除输入子字符串。 / p>

例如:第一次迭代后,dict将= {h,聊天,聊天,r,t,tats,chatats}

我们还会为每个条目设置一个长度变量,跟踪条目的原始长度。但我不确定这是否是正确的方法/甚至可行。

1 个答案:

答案 0 :(得分:1)

构建单词及其较短/较长版本的图表,例如对于问题(hat, chat, chats, rat, tat, tats, chatats)中的单词列表,那将是:

                           chatats
hat ─── chat ─── chats
rat
tat ─── tats

向后构建图表,即对于每个单词,通过删除前导或尾随字符来查找2个较短的单词。

为了加快查找速度,请为其图形节点构建Map个单词。

现在找到图中最长的链。