Find the Index of the First Occurrence in a String
https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ | Easy |
Условие
Дана строка haystack и подстрока needle. Найдите индекс первого вхождения подстроки needle в строке haystack. Если подстрока не найдена, верните -1.
Примеры
Input:
haystack = “sadbutsad”, needle = “sad”Output:
0Explanation:
Подстрока “sad” встречается в строке “sadbutsad” начиная с индекса 0.
Input:
haystack = “leetcode”, needle = “leeto”Output:
-1Explanation:
Подстрока “leeto” не встречается в строке “leetcode”.
Решение
fun strStr(haystack: String, needle: String): Int {
// Если needle пустая строка, возвращаем 0
if (needle.isEmpty()) return 0
// Длина haystack и needle
val haystackLength = haystack.length
val needleLength = needle.length
// Если needle длиннее haystack, возвращаем -1
if (needleLength > haystackLength) return -1
// Проходим по строке haystack
for (i in 0..(haystackLength - needleLength)) {
var j = 0
// Проверяем совпадение каждого символа
while (j < needleLength && haystack[i + j] == needle[j]) {
j++
}
// Если нашли полное совпадение, возвращаем индекс
if (j == needleLength) {
return i
}
}
// Если needle не найдено
return -1
}
Временная сложность
O(n), где n — длина строки haystack. Метод indexOf работает за линейное время.
Пространственная сложность
O(1), так как дополнительное пространство не требуется.