单词休息时间复杂度

时间:2013-12-16 08:44:09

标签: string algorithm data-structures dictionary time-complexity

我遇到了断字问题,这个问题是这样的:

  

给定输入字符串和单词字典,对输入进行分段   如果字符串成为空格分隔的字典单词序列   可能的。

例如,如果输入字符串是“applepie”而字典包含一组标准的英文单词,那么我们将返回字符串“apple pie”作为输出

现在我自己提出了二次时间解决方案。我遇到了各种other quadratic time solutions using DP

然而,在Quora中,用户发布了linear time solution to this problem

我无法弄清楚它是如何变成线性的。他们在时间复杂度计算中有些错误吗?此问题的最佳可能最差情况时间复杂度是多少?我在这里发布最常见的DP解决方案

String SegmentString(String input, Set<String> dict) {
    int len = input.length();
    for (int i = 1; i < len; i++) {
        String prefix = input.substring(0, i);
        if (dict.contains(prefix)) {
              String suffix = input.substring(i, len);
              if (dict.contains(suffix)) {
                  return prefix + " " + suffix;
              }
        }
    }
    return null;
}

1 个答案:

答案 0 :(得分:0)

linked here的“线性”时间算法如下:

如果字符串是sharperneedle而字典是sharp, sharper, needle

  1. 它会在字符串中推送sharp
  2. 然后它看到er不在字典中,但如果我们将它与添加的最后一个字组合,则sharper存在。因此它弹出最后一个元素并将其推入。
  3. IMO上述逻辑对字符串eaterror和字典eat, eater, error失败。

    此处er将从列表中弹出,然后按eater。其余字符串ror不会被识别并丢弃。

    关于您发布的代码,如评论中所述,这仅适用于带有一个分区的两个单词。