LeetCode: Find the Index of the First Occurrence in a String

----- Условие ----- Найти индекс первого вхождения подстроки needle в строку haystack. Если вхождения нет, то вернуть -1.

----- Решение ----- Устанавливаем счетчик совпавших символов needleInd = 0. Проходимся в цикле по строке. Если символ строки равен символу подстроки с индексом needleInd, то инкрементируем needleInd. Если счетчик достигает длины подстроки, то возвращаем i - needle.length + 1 (текущий индекс в строке - длина подстроки + 1). Если какой-то из символов строки не совпадает с символом подстроки, а needleInd больше 0, то счетчик i уменьшается на needleInd (и сразу увеличивается на 1 в цикле, чтобы начать проверять строку со следующего символа), а счетчик needleInd сбрасывается.

В JavaScript ответ можно получить проще: haystack.indexOf(needle). Однако такое решение обычно не принимается.

Сложность алгоритма по времени O(n * m), где n - длина строки, m - длина подстроки, сложность по памяти O(1).

----- Код ----- /**  * @param {string} haystack  * @param {string} needle  * @return {number}  */ const strStr = function(haystack, needle) {   let needleInd = 0;

for (let i = 0; i < haystack.length; i++) {     if (haystack[i] === needle[needleInd]) {       needleInd++;             if (needleInd === needle.length) return i - needle.length + 1;     } else {       if (needleInd !== 0) {         i = i - needleInd;         needleInd = 0;       }     }   }

return -1; };