给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
示例 1:
输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
提示:
1 <= haystack.length, needle.length <= 104
haystack
和needle
仅由小写英文字符组成
参考代码:
class Solution {
public:
int strStr(string haystack, string needle) {
int n = haystack.size(), m = needle.size();
for(int i = 0; i <= n - m; i++){
int j = i, k = 0;
while(k < m and haystack[j] == needle[k]){
j++;
k++;
}
if(k == m) return i;
}
return -1;
}
};
讲解:
遍历原字符串 haystack
中的每一个字符,将每个字符作为搜索的起始点,然后从这个起始点开始尝试匹配目标字符串 needle
简洁代码:
cpp
if (needle.empty()) return 0; // 如果needle为空,返回0
if (needle.size() > haystack.size()) return -1; // 如果needle比haystack长,返回-1
int m = haystack.size();
int n = needle.size();
for (int i = 0; i <= m - n; ++i) {
if (haystack.substr(i, n) == needle) {
return i; // 如果找到匹配项,返回起始下标
}
}
return -1; // 如果没有找到匹配项,返回-1
}
};
使用了 substr
方法来检查 haystack
中从当前位置开始的 n
长度的子串是否与 needle
相等。这样做更加简洁且易于理解。同时,它也处理了 needle
为空的情况。