Bisect весы лучше, чем это.Но среда выполнения не смотрит на сравнение префиксов.(Время выполнения = O (n log (n)), если вы рассматриваете аналогичные префиксы для префиксов. Но для примера это лучшее решение.)
Самый эффективный способ - использовать толькопервые n символов (с префиксом n = макс. длины) [необязательно: конечный автомат может сделать это и для вас] и передать каждую из этих букв конечному автомату.
Этот конечный автомат должен решитькакие префиксы все еще можно получить.
E.g. to be tested: "prefix" with your list of prefixes
You start with "" -> everything is possible
You read the "p" -> {pro, pre} are possible prefixes now
You read the "r" -> still the same, both start with "pr"
You read the "e" -> pro is not possible and pre has been found.
Можно создать конечный автомат из списка префиксов.Но я не буду вдаваться в подробности.
Но это должно привести к состоянию и таблице переходов, которая зависит от текущего состояния и следующего прочитанного символа.
An example:
Let me add prof to your list of prefixes.
0:
p -> 1
? -> to be added, there are more prefixes
1:
r -> 2
? -> terminate, nothing found
2:
e -> terminate, found pre
o -> 3, found pro
? -> -1
3:
f -> terminate, found pro and prof
? -> terminate, found pro
Как читатьthis: state: читать символ -> следующее состояние, найдено?= все остальное