这题是容易题。要注意一点是当haystack为非空,needle=""时应该返回0。虽然比较奇怪,但是好像stl里面的find也是这样做的。
解法1:
#include <iostream>
#include <string>
using namespace std;
int strStr(string haystack, string needle) {
size_t len_1 = haystack.size();
size_t len_2 = needle.size();
if ((haystack==needle) || (len_2==0)) return 0;
if ((len_1==0) || (len_2>len_1)) return -1;
for (size_t i=0; i<=len_1-len_2; i++) {
if (haystack.substr(i,len_2)==needle)
return i;
}
return -1;
}
int main()
{
string haystack = "mississippi", needle = "pi";
cout<<strStr(haystack, needle);
return 0;
}
解法2:C风格的写法 (LintCode-13)
int strStr(const char *source, const char *target) {
if (!source || !target) return -1;
if (strlen(source)<strlen(target)) return -1;
for (int i=0; i<=strlen(source)-strlen(target); ++i) {
bool find=true;
int index_i=i;
int j=0;
while (j<strlen(target)) {
if (source[index_i++]!=target[j++]) {
find=false;
break;
}
}
if (find) return i;
}
return -1;
}
解法3: 另外看到Leetcode上好多答案是用KMP做。下次再补充。