【问题标题】:Longest String you can form by adding one character at a time to an input string通过一次将一个字符添加到输入字符串中可以形成的最长字符串
【发布时间】:2017-09-26 07:57:19
【问题描述】:

所以我最近在一次采访中得到了这个问题:

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

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

返回“聊天”,因为:在 -> 帽子 -> 聊天 -> 聊天

我想到了一个解决方案,我们暴力破解并尝试将 a - z 中的所有字母添加到输入字符串的前后,如果存在新字符串,那么我们再次暴力破解这 26 个字母,最终得到最后一个字符串。

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

我想到的一种方法是遍历字典,如果输入字符串作为长度大于更改输入字符串长度 1 的任何条目的子字符串存在,则从条目字符串中删除输入子字符串。

例如:在第一次迭代之后,dict 将是 = {h, chat, chats, r, t, tats, chatats}

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

【问题讨论】:

    标签: java string dictionary longest-substring


    【解决方案1】:

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

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

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

    为了更快地查找,为它们的图形节点构建一个词的Map

    现在找出图中最长的链。

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 2014-07-17
      • 2020-01-29
      相关资源
      最近更新 更多