Все прекрасно, да вот беда: в нем очень часто идут повторения слов. Например первые три строки можно отнести к одному токену, удалив первые два. Как это можно сделать?
str.split()
Можно префиксное дерево построить
Вы хотите, чтобы вторая строка была абажур + на и третья абажур + на + лампе?
я хочу, чтобы он просто убрал первые две фразы. Третья фраза очевидна
str.startswith - слишком просто? :)
я так понял вопрос не в оптимальном хранении, а в дедупликации
А я не знаю как оптимально в дедупликации сделать
Можно удалить предложения с количеством слов меньше 3. if len(str.split()) < 3: remove(str) Константу 3 можно сделать переменной и вычислять через функцию нахождения максимальной последовательности слов.
Это если Python установлен, в макросах там по другому
Точно не подойдет
Я так понимаю, что вам нужны уникальные последовательности максимальной длины: Абажур (удалить) Абажур на (удалить) Абажур на лампе (оставить как 1 токен) Для того, чтобы вхождения «Абажур», «Абажур на» искались поиском и токенизировались как «Абажур на лампе» так?
А вдруг абажур будет не на лампе, а на чем-то другом, тогда у вас все сломается(
Типичная задача с собеседования Яндекса на С++. Немного не DS, а бэкенд литкод. https://habr.com/ru/articles/142825/
seq1 = "ABCDGH" seq2 = "AEDFHR" print("Максимальная общая подпоследовательность:", "".join(lcs(seq1, seq2))) Максимальная общая подпоследовательность: ADH. Я верно понял?
я же верно понял?
Так, если в числах, то нам дают нод, а похоже надо нок.
знаете вы могли бы вобще свою задачу в чатгпт записать и прямо код получить...
Вы не поверите, уже...
def dedup(items: Sequence[str]): prev = '' for it in sorted(items): if not it.startswith(prev): yield prev prev = it yield prev Трудоёмкость O(n*log(N))
Вы просто трудоёмкость сортировки вывели на аутсорс🤓
А там больше ничего и нет. После сортировки - проход с проверкой. :)
Обсуждают сегодня