原題鏈接: 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;
}