I have list of seed strings, about 100 predefined strings. All strings contain only ASCII characters.

```
std::list<std::wstring> seeds{ L"google", L"yahoo", L"stackoverflow"};

```

My app constantly receives a lot of strings which can contain any characters. I need check each received line and decide whether it contain any of seeds or not. Comparison must be case insensitive.

I need the fastest possible algorithm to test received string. 

Right now my app uses this algo:

```
std::wstring testedStr;
for (auto & seed : seeds)
{
    if (boost::icontains(testedStr, seed))
    {
        return true;
    }
}
return false;

```

It works well, but I'm not sure that this is the most efficient way.

How is it possible to implement the algorithm in order to achieve better performance?

This is a Windows app. App receives valid `std::wstring` strings.

---

**Update**

For this task I implemented Aho-Corasick algo. If someone could review my code it would be great - I do not have big experience with such algorithms. Link to implementation: [gist.github.com](https://gist.github.com/Mezrin/07a5495e2cbb72bf5e68b3257b38b7ba)