Highlight:
1. edge case: when needle is "", return 0
2. take care of edge cases: needle.size() > haystack.size(), return -1
解法一
class Solution {
public:
int strStr(string haystack, string needle) {
auto res = haystack.find(needle);
if(res!=string::npos){
return res;
}
return -1;
}
};
解法二
写法一
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle.empty()) return 0;
int n = needle.size(), m = haystack.size();
if(n>m) return -1;
int pos = 0;
for(int i=0;i<m;i++){
if(needle[pos]==haystack[i]){
pos++;
if(pos==n) return i-pos+1;
}else{
i = i-pos;
pos = 0;
}
}
return -1;
}
};
写法二:easier to understand
Hightlight 3. haystack starting from m-n is impossible
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle.empty()) return 0;
int n = needle.size(), m = haystack.size();
if(n>m) return -1;
for(int i=0;i<=m-n;i++){
int j=0;
for(;j<n;j++){
if(needle[j]!=haystack[i+j]) break;
}
if(j==n) return i;
}
return -1;
}
};
解法三
KMP pending