实现 strStr() 函数。
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1
。
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
示例 1:
输入:haystack = "hello", needle = "ll" 输出:2
示例 2:
输入:haystack = "aaaaa", needle = "bba" 输出:-1
示例 3:
输入:haystack = "", needle = "" 输出:0
提示:
0 <= haystack.length, needle.length <= 5 * 104
haystack
和needle
仅由小写英文字符组成
int strStr(char* haystack, char* needle) {
int n = strlen(haystack), m = strlen(needle);
for (int i = 0; i + m <= n; i++) {
//是在haystack中找与needle相同的
//而且返回的是needle首个字符位置
//所以遍历时必须预留出needle的位置
//当needle符合时
//i遍历的+needle的长度是正好=haystack的长度的
bool flag = true;
//bool型true的值为1
for (int j = 0; j < m; j++) {
//j<m是为了从needle首位开始
//在首位的前位(是在haystack中)为i
//加上j
//那么j<m配对时才不会超出needle范围
if (haystack[i + j] != needle[j]) {
flag = false;
//有不配对的直接false并break
//break后就输出配对上的
break;
}
}
if (flag) {
return i;
//flag不为0代表有配对上的
//那么返回对应的i
}
}
//如果都没有配对的
//按题目意思返回-1
return -1;
}