Leetcode: 28. Implement strStr()

Description

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

思路

  • 字符串匹配问题
  • KMP,计算匹配串str的next值时,next[i]的值就是字符串的前i个字符组成的字符串的前缀和后缀相同字符的最大长度

代码

class Solution {
public:
    int strStr(string haystack, string needle) {
        int len1 = haystack.size(), len2 = needle.size();
        
        if(len2 == 0) return 0;
        if(len1 == 0) return -1;
        
        vector<int> nums(len2 + 1, 0);
        getNext(needle, nums, len2);
        
        int i = 0, k = 0;
        while(i < len1){
           
            if(k == -1 || haystack[i] == needle[k]){
                ++i;
                ++k;
            }
            else{
                k = nums[k];
            }
            if(k == len2) return i - len2;
        }
        
        return -1;
    }
    
    void getNext(string &str, vector<int>& nums, int len){
        nums[0] = -1;
        
        int j = 0, k = -1;
        while(j < len){
            if(k == -1 || str[j] == str[k]){
                ++j;
                ++k;
                nums[j] = k;
            }
            else k = nums[k];
        }
    }
};
posted @ 2017-05-08 11:02  JeffLai  阅读(155)  评论(0编辑  收藏  举报