实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
思路1
直接遍历haystack数组,看哪一位与needle的第一个元素相等,count用来判断是否比较到needle的末尾
int strStr(char* haystack, char* needle) {
int len=strlen(haystack);
int len2=strlen(needle);
if((len==0&&len2==0)||len2==0){
return 0;
}
if(len==0){
return -1;
}
int count=0;
for(int i=0;i
修改后
int strStr(char* haystack, char* needle) {
int len=strlen(haystack);
int len2=strlen(needle);
if((len==0&&len2==0)||len2==0){
return 0;
}
int count=0;
int i=0;
while(i<=len-len2){
if(haystack[i+count]==needle[count]){
if(count==(len2-1)){
return i;
}
++count;
}else{
count=0;
i++;
}
}
return -1;
}
思路2
i<=haystack.length()-needle.length()是为了i+j不超过haystack的长度
class Solution {
public int strStr(String haystack, String needle) {
if(needle.isEmpty()){
return 0;
}
for(int i=0;i<=haystack.length()-needle.length();++i){
for(int j=0;j
思路3
if (!haystack || !needle) return -1;
for (int i = 0; ; ++i) {
for (int j = 0; ; ++j) {
if (needle[j] == 0) return i;
if (haystack[i + j] == 0) return -1;
if (haystack[i + j] != needle[j]) break;
}
}