Даны две строки needle
(иголка) и haystack
(стог сена).
Нужно вернуть индекс первого появления строки needle
в строке haystack
или -1, если строки needle
нет в строке haystack
.
Входные данные: haystack = “sadbutsad”, needle = “sad”
Результат: 0
Пояснение: sad
встречается при индексах 0 и 6. Первое вхождение имеет индекс 0, поэтому нужно вернуть 0.
Входные данные: haystack = “leetcode”, needle = “leeto”
Результат: -1
Пояснение: leeto
не встречается в leetcode
, поэтому возвращается -1.
class Solution {
public:
int strStr(string haystack, string needle) {
int n = haystack.length(), l = needle.length(), i, j;
for(i = 0; i < n-l+1; i++) {
if(haystack[i] == needle[0]) {
for(j = 1; j < l; j++) {
if(haystack[i+j] != needle[j]) {
// нет совпадения, выходим
break;
}
}
if(j == l) {
// нашлось полное совпадение
return i;
}
}
}
return -1;
}
};
Продвигаемся по строке haystack
до тех пор, пока может встретиться строка needle
(не до самого конца haystack
, а до разницы размеров haystack
и needle
).
Как только в строке haystack
замечаем первый символ из needle
, запускаем проверку символов needle
в haystack
.
Если все символы в строках совпадут, возвращается индекс первого вхождения.
Если же какой-то из символов не совпадёт, процесс проверки останавливается, и ищется следующее вхождение первого символа needle
в haystack
.