【发布时间】:2014-01-03 14:04:54
【问题描述】:
我遇到了这样的分词问题:
给定一个输入字符串和一个单词字典,对输入进行分段 将字符串转换为以空格分隔的字典单词序列 if 可能。
例如,如果输入字符串是“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;
}
【问题讨论】:
-
如何解决歧义?
expertsexchange => [expert, sex, change], [experts, exchange] -
线性时间解决方案仅适用于两个单词的情况。你对此有何要求?最简单的通用解决方案是生成一个包含 2^n 个项目的幂集,DP 可以使其更快到 O(n^2)。
-
显然可以在此链接上找到另一个线性定时算法stackoverflow.com/questions/8793387/…看第二个答案
标签: string algorithm data-structures dictionary time-complexity