KMP算法

算法原理:
KMP算法_第1张图片

具体介绍:https://www.cnblogs.com/tangzhengyue/p/4315393.html

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

代码:

class Solution {
public:
    int strStr(string haystack, string needle) {
        int m = haystack.size();
        int n = needle.size();
        if(!n) 
            return 0;

        haystack = " "+haystack;
        needle = " "+needle;

        vector<int> ne(n+10);
        for(int i =2,j=0;i<=n;i++){
            while(j&&needle[i]!=needle[j+1]) 
                j=ne[j];
            if(needle[i]==needle[j+1]) 
                j++;
            ne[i]=j;
        }

        for(int i =1,j=0;i<=m;i++){
            while(j&&haystack[i]!=needle[j+1]) 
                j = ne[j];
            if(haystack[i]==needle[j+1]) 
                j++;
            if(j==n){
                return i-n;
            }
        }
        return -1;
    }
};

你可能感兴趣的:(算法题)