找到单词并在它们后面放置空格

时间:2017-10-02 21:43:28

标签: string algorithm pointers dictionary search

一旦我在面试中被问到一个问题,我仍然不清楚如何解决它。或者甚至无法接近它。

问。给定的是一系列字符,例如“thisisachallengingquestion”,编写一个程序,在除了最后一个字之外的每个字之后放置空格

输入: “thisisachallengingquestion”

输出: “这是一个具有挑战性的问题”

我的方法

  1. 假设给定一个字典对象,其中包含可以在字符串中的所有单词。
  2. 用2个指针遍历所有字母。使用runner technique,继续跟踪实际单词以匹配对象中的键。
  3. 示例:

    最初:指针1和指针2均为索引0.比较字典对象键中的“t”。(NO)

    第一次迭代:“th”< - 如果它在字典对象中包含为键(NO)

    第二次迭代:“thi”(否)

    第3次迭代:“此”(是)

    将单词从第0个索引推送到新数组中的第3个索引,并在其后放置空格(“”)。

    1st 2nd 指针放在(第二指针+ 1)的值上,依此类推,直到给定的长度为止字符串。

    如果有更好的解决方案,请告诉我。

    问题可能会出现:

    1.未提供字典?

    2.如何不使用其他数组?(Javascript允许使用动态数组,那么我们如何使用splice或者我们可以使用append?)

2 个答案:

答案 0 :(得分:1)

这可以通过动态编程来完成。从左到右遍历数组。在你去的时候更新一个位数组来显示是否有一个在给定点结束的解决方案。在每个位置考虑所有与该点结尾的文本后缀匹配的字典单词。查看位数组,看看在拟议单词之前出现的文本是否整齐。如果是,请设置该位置的位。当你走到最后,如果事实证明有一个解决方案(位数组中的最后一位)从右向左工作,检查位数组以确保你选择的任何单词离开你的位置找到左边文本部分的解决方案。

(这解决了找到不同长度的可能匹配的问题 - 如果有一连串的文字可以整齐地记录所有文本,这将找到它)

答案 1 :(得分:1)

我有伪代码。

words = Trie()
for word in dictionary:
    words. insert(word)

let str be the string.

let output be array
for char in string:
    words.walk(char)
    output.append(char)
    If words.isAtEndofWord() then
         output.append(' ')
         words.seek(0)

output = toString(output)

Trie是创建字典的数据结构。您可以添加使用树节点遍历的功能,除非它到达单词的末尾。