我遇到了断字问题,这个问题是这样的:
给定输入字符串和单词字典,对输入进行分段 如果字符串成为空格分隔的字典单词序列 可能的。
例如,如果输入字符串是“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;
}
答案 0 :(得分:0)
linked here的“线性”时间算法如下:
如果字符串是sharperneedle
而字典是sharp, sharper, needle
,
sharp
。er
不在字典中,但如果我们将它与添加的最后一个字组合,则sharper
存在。因此它弹出最后一个元素并将其推入。 IMO上述逻辑对字符串eaterror
和字典eat, eater, error
失败。
此处er
将从列表中弹出,然后按eater
。其余字符串ror
不会被识别并丢弃。
关于您发布的代码,如评论中所述,这仅适用于带有一个分区的两个单词。