给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
采用KMP算法
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string
class Solution { public: void getNext(int* next,const string& s) { int j = 0; next[0] = 0; for(int i = 1; i < s.size(); i++) { while( j > 0 && s[i] != s[j]) { j = next[j - 1]; } if(s[i] == s[j]) { j++; } next[i] = j; } } int strStr(string haystack, string needle) { if(needle.size() == 0) { return 0; } int next[needle.size()]; getNext(next,needle); int j = 0; for(int i = 0; i < haystack.size(); i++) { while(j > 0 && haystack[i] != needle[j]) { j = next[j - 1]; } if(haystack[i] == needle[j]) { j++; } if(j == needle.size()) { return (i - needle.size() + 1); } } return -1; } };