Для меня это звучит как случай преждевременной оптимизации.Смешно преждевременно.Даже если у вас есть 70 команд вместо всего лишь семи, время, необходимое для последовательного поиска всех ваших команд, настолько мало, что ваш пользователь не заметит этого.И это не значит, что эту функцию вы будете вызывать сотни или тысячи раз в секунду.Таким образом, тратя часы на реализацию причудливого поиска, вы сэкономите несколько миллисекунд, а время просто потрачено впустую.Вполне вероятно, что количество времени, которое ваши пользователи сэкономят в течение жизни программы, даже близко не будет соответствовать количеству времени, которое вы потратите на разработку, написание и отладку оптимизированного решения.
У вас естьнебольшое количество очень коротких команд.Компьютеры быстры.Здесь нет проблем для решения.Потратьте свое время на функции, которые действительно принесут пользу пользователю.
Теперь, если у вас есть очень большое количество (десятки тысяч) строк для поиска, вы можете воспользоваться некоторой оптимизацией.В таком случае .,.
Вы могли бы начать с создания словаря с буквенным обозначением, а значением является список всех слов, содержащих эту букву.Таким образом, ваш пример будет выглядеть примерно так:
a, [Save, Save as, Paste]
c, [Copy, Cut, Select all]
e, [New, Open, Save, Save as, Paste, Select all]
n, [New, Open]
... etc.
Затем введите в словаре слова "буква следует за буквой".Это станет большим в спешке.Например, «Вставить» будет содержать записи:
pa ps pt pe как в начале сеанса
Вы можете продолжить создавать эти ключи для более длинных подстрок.Например, вы получаете:
pas pat pae pst pse pse pte
Это может быть очень эффективно, когда строки короткие.Это становится менее эффективным, когда строки становятся длиннее, потому что вероятность строки, содержащей определенную комбинацию букв, увеличивается с увеличением длины строки.
Возможно, вы могли бы сэкономить некоторое пространство, создав trie ,но техника по сути та же самая.
Также потенциально полезно: дерево суффиксов и обобщенный суффикс tre e.