题目
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
题解
class Solution {
public:
int strStr(string haystack, string needle) {
int i = 0;
const char *ps1 = haystack.c_str();
const char*ps2 = needle.c_str();
const char *ps11 = haystack.c_str();
const char*ps21 = needle.c_str();
int len1 = haystack.size();
int len2 = needle.size();
if(haystack==""&&needle=="")
return 0;
if(len1==len2)
{
if(haystack == needle)
return 0;
}
//如果needle的长度大于haystack,haystack不可能存在子串needle,直接返回NULL
if (len2>len1)
return -1;
while (*ps1 != '\0')
{
while ((*ps1 == *ps2) && (*ps2 != '\0'))
{
ps1++;
ps2++;
}
if (*ps2 == '\0')
{
return i;
}
else
{
ps2 = ps21;
ps11++;
ps1 = ps11;
len1--;
i++;
}
//此时haystack中剩余的字符串已经小于needle的长度,不必再继续查找
if (len1<len2)
{
return -1;
}
}
return -1;
}
};