У меня есть список семенных строк, около 100 предопределенных строк. Все строки содержат только символы ASCII.
std::list<std::wstring> seeds{ L"google", L"yahoo", L"stackoverflow"};
Мое приложение постоянно получает много строк, которые могут содержать любые символы. Мне нужно проверить каждую полученную строку и решить, содержит ли она какие-либо семена или нет. Сравнение должно быть нечувствительным к регистру.
Мне нужен самый быстрый алгоритм для проверки полученной строки.
Сейчас мое приложение использует этот алгоритм:
std::wstring testedStr;
for (auto & seed : seeds)
{
if (boost::icontains(testedStr, seed))
{
return true;
}
}
return false;
Это хорошо работает, но я не уверен, что это самый эффективный способ.
Как можно реализовать алгоритм для достижения лучшей производительности?
Это приложение для Windows. Приложение получает действительные строки std::wstring
.
Обновление
Для этой задачи я реализовал Ахо-Корасикский алго. Если бы кто-то мог просмотреть мой код, это было бы здорово - у меня нет большого опыта работы с такими алгоритмами. Ссылка на реализацию: gist.github.com