实现 strStr() 函数。
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1
。
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符
示例 1:
输入:haystack = "hello", needle = "ll" 输出:2
法1 暴力求解
//暴力搜索
int strStr(char * haystack, char * needle){
if(needle == "")
return 0;
int h = strlen(haystack);
int n = strlen(needle);
for(int i = 0;i<h-n+1;i++){
bool tag = true;//设置哨兵位
for(int j = 0;j<n;j++){
if(haystack[i+j]!=needle[j]){//在j++中 haystack[i+j]相当于不断更改i的值 固定j不变 相当于 haystack{0,1,2,3,4,5....}与needle[0]比较
// 相等后 j++ 相当于 haystack{1,2,3,4,5.....}与needle[1] 比较 从而实现 顺序比较相等
//一旦 出现不相等 就哨兵位false
tag =false;
break;
}
}
if(tag){
return i;
}
}
return -1;
}
法二 kmp