я наткнулся на проблему разрыва слово, которое идет что-то вроде этого:Слово Перерыв Трудоемкость
Учитывая входную строку и словарь слов, сегмент входной строки в разделенных пробелами последовательности слов словаря если возможно.
Например, если входной является строка «applepie» и словарь содержит стандартный набор английских слов, то мы бы вернуть строку «яблочный пирог», как выход
Теперь я сам придумал квадратичное временное решение. И я наткнулся на различные 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 => [эксперт, пол, изменение], [эксперты, обмен]' – mishadoff
Линейное временное решение работает только в случае двух слов. Каково ваше требование? Простейшее общее решение включает в себя создание набора мощности из 2^n элементов, DP может сделать его быстрее O (n^2). –
, очевидно, еще один линейный тайм-алго можно найти по этой ссылке http://stackoverflow.com/questions/8793387/how-to-break-down-a-given-text-into-words-from-the-dictionary?rq= 1 посмотрим на второй ответ –