Проблема в алгоритме поиска подстроки в строке [C++]

Я написал этот алгоритм но почему-то не работает на тесте

aac ac

Пожалуйста подскажите где моя ошибка? Вот мой код:

int find(string str, string sub) {
    int i = 0, j = 0;
    while (j < str.size()) {
        int k = 0;
        while (j < sub.size()) {
            if (str[i] == sub[j]) {
                j++;
                i++;
                k++;
            } else {
                i++;
                k = 0;
                j = 0;
            }
        }
        
        if (k == sub.size()) {
            return i-k;
        }
    }
    return -1;
 }

Ответы (1 шт):

Автор решения: Harry

Я изучаю алгоритм Кнута-Морриса-Пратта поэтому хочу написать свой скрипт

Ну, тогда примерно так:

int KMP_find(const string& in, const string& sub)
{
    vector<int> f(sub.size(),0);
    for(int t = 0, s = 1; s < f.size(); s++)
    {
        while((t > 0) && (sub[s] != sub[t]) ) t = f[t-1];
        if (sub[s] == sub[t]) f[s] = ++t; else f[s] = 0;
    };
    for(int s = 0, i = 0; i < in.size(); i++)
    {
        while((s > 0) && (in[i] != sub[s])) s = f[s-1];
        if (in[i] == sub[s]) s++;
        if (s == sub.size()) return i-s+1;
    };
    return -1;
};

То, что написали вы, никакого отношения к КМП не имеет - это попытка простого поиска путем "прикладывания" шаблона ко всем местам в строке и сравнения...

P.S. Только вот все равно find будет быстрее :)

→ Ссылка