原题链接: http://oj.leetcode.com/problems/implement-strstr/
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
这题据说用KMP算法会是线性时间复杂度,但KMP实现起来有点复杂。这里用了简单的brute force,复杂度O(mn)。
技巧是外层for循环只需要搜寻haystack-needle+1次。
已犯错误:
- i <= haystack.length() - needle.length()写成了<号。这种情况想想极端情形,haystack-needle==0的情况就理解了。
if(needle.length()==0) return 0; 这条件是leetcode的testcase要求的。
public int strStr(String haystack, String needle) {
if (needle.length() > haystack.length()) return -1;
if(needle.length()==0) return 0;
for (int i = 0; i <= haystack.length() - needle.length(); i++) {
int needleIndex = 0;
int haystackIndex = i;
while (needle.charAt(needleIndex) == haystack.charAt(haystackIndex)) {
needleIndex++;
haystackIndex++;
if (needleIndex == needle.length()) {
return haystackIndex - needleIndex;
}
}
}
return -1;
}