28. Implement strStr()

Problem


Tags: Two Pointers, String, String Matching

Implement strStr()open in new window.

Given two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Clarification:

What should we return when needle is an empty string? This is a great question to ask during an interview.

For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's strstr()open in new window and Java's indexOf()open in new window.

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Constraints:

  • 1 <= haystack.length, needle.length <= 10^4
  • haystack and needle consist of only lowercase English characters.

Code

C

// 28. Implement strStr() (11/27/53958)
// Runtime: 12 ms (10.54%) Memory: 6.04 MB (9.90%) 

int strStr(char haystack[], char needle[]) {
    // 如果 needle 為空字串,直接回傳 0
    if (needle[0] == '\0') return 0;

    // 計算兩字串長度
    int haystack_length = strlen(haystack);
    int needle_length = strlen(needle);

    // haystack 從頭開始比對
    for(int i = 0; i < haystack_length - needle_length + 1; i++) {
        // 用 memcmp 比較
        if(memcmp(haystack + i, needle, needle_length) == 0) {
            return i;
        }
    }
    return -1;
}