[Problem] 
  
 
  
KMP算法,注意:如果needle长度为0,则返回haystack.
 
  
[Solution]
 
  
Implement strStr().
 Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 
KMP算法,注意:如果needle长度为0,则返回haystack.
[Solution]
class Solution {
   
public:
    // get next
    void getNext(int next[], int len, char *needle){
   
        // invalid
        if(len <= 0 || needle == NULL){
   
            return;
        }
        
        // generate
        int i = 0, j = -1;
        next[0] = -1;
        while(i < len-1){
   
            if(j == -1 || needle[i] == needle[j]){
   
                i++;
                j++;
                next[i] = j;
            }
            else{
   
                j = next[j];
            }
        }
    }
    // strstr
    char *strStr(char *haystack, char *needle) {
   
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        // NULL string
        if(haystack == NULL || needle == NULL){
   
            return NULL;
        }
        
        // empty string
        if(strlen(haystack) == 0 || strlen(needle) == 0){
   
            if(strlen(needle) == 0){
   
                return haystack;
            }
            else{
   
                return NULL;
            }
        }
        
        // get next
        int len1 = strlen(haystack), len2 = strlen(needle);
        int *next = new int[len2];
        getNext(next, len2, needle);
        
        // KMP
        int i = 0, j = 0;
        while(i < len1){
   
            if(haystack[i] == needle[j]){
   
                i++;
                j++;
            }
            else{
   
                if(next[j] == -1){
   
                    i++;
                    j = 0;
                }
                else{
   
                    j = next[j];
                }
            }
            
            // end of needle
            if(j == len2){
   
                return haystack + (i - len2);
            }
        }
        return NULL;
    }
};说明:版权所有,转载请注明出处。 Coder007的博客