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; };