所以我最近在接受采访时得到了这个问题:
给定一个字典和一个起始字符串,你可以通过在输入字符串的前后添加一个字符来形成最长的单词,每个新单词也必须出现在字典中?
Ex:input ='at'Dict = {hat,chat,chats,rat,tat,tats,chatats}
返回'聊天',因为:at - >帽子 - >聊天 - >聊天
我想到了一个解决方案,我们强行并尝试将a-z中的所有字母添加到输入字符串的正面和背面,如果存在新的字符串,那么我们将26个字母强行前后再次使用,最终得到最后的字符串。
我想知道是否有一种更有效的方法来解决这个问题,而不是每次强制所有26个字母前后都强行解决?
我想到的一种方法是通过字典,如果输入字符串作为任何条目的子字符串存在,其长度大于改变输入字符串的长度,则从条目字符串中删除输入子字符串。 / p>
例如:第一次迭代后,dict将= {h,聊天,聊天,r,t,tats,chatats}
我们还会为每个条目设置一个长度变量,跟踪条目的原始长度。但我不确定这是否是正确的方法/甚至可行。
答案 0 :(得分:1)
构建单词及其较短/较长版本的图表,例如对于问题(hat, chat, chats, rat, tat, tats, chatats
)中的单词列表,那将是:
chatats
hat ─── chat ─── chats
rat
tat ─── tats
向后构建图表,即对于每个单词,通过删除前导或尾随字符来查找2个较短的单词。
为了加快查找速度,请为其图形节点构建Map
个单词。
现在找到图中最长的链。