Я ищу, чтобы определить, содержится ли строка в начале списка другой строки. Например, если я имел строку cde
, и список строк:Определите, содержит ли строка, содержащуюся в другой строке, в python
['ab', 'bce', 'cdef']
тогда будет определять, что cde
содержится в начале cdef
Я также ищу пойти в другую сторону вокруг - то есть, если бы у меня был термин abc
, чтобы определить, что ab
из вышеуказанного списка содержится в нем.
Теперь очевидно, что это тривиально, чтобы настроить цикл for, проверяя каждый экземпляр с помощью функции startswith
, однако это не масштабируется с очень большим списком возможностей для проверки.
При проверке каждого экземпляра O (n) [и, следовательно, очень медленного, если у вас есть 100 000 возможностей], я ищу способ проверки O (1) ... похоже, что если «список» был предварительно отсортированный, тогда можно просто извлечь ближайшее совпадение, но не уверен, как это сделать.
Разъяснение:
- Я только ищу, где есть идеальный матч в начале строки (то есть весь срок поиска включен).
- Я буду искать несколько поисковых терминов (таким образом, при первоначальной сортировке данные могут быть не быстрыми, стоимость потолка будет экономить на последующих смотровых прогибах).
- Идеально возвратит все возможные соответствия (т. Е. Если
cdef
иcdefg
, где в списке, и глядя вверхcde
, тогда оба будут возвращены). - Я использую термин «список» свободно, как в наборе терминов.
Просьба пояснить проблему. Все ли необходимые строки включены в список? Вам нужен только один матч или все матчи? Являются ли совпадения только в начале строки? – Prune
Обратите внимание, что сортировка списка не лучше, чем O (n log n), поэтому ваша идея O (n) не произойдет. Кроме того, обратите внимание, что проверка строки не менее O (m), по длине более короткой строки. Пожалуйста, убедитесь, что вы поняли, когда говорите о сложности: будь то шаг или весь проход. – Prune
Вы можете добраться до O (n) в течение многих проверок строк. Я работаю над чем-то –