## 题目地址 https://leetcode-cn.com/problems/implement-strstr/ ## 思路 KMP 经典算法 KMP的经典思想是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。 ## C++代码 ``` class Solution { public: void preKmp(int* next, const string& s){ next[0] = -1; int j = -1; for(int i = 1; i < s.size(); i++){ while (j >= 0 && s[i] != s[j + 1]) { j = next[j]; } if (s[i] == s[j + 1]) { j++; } next[i] = j; } } int strStr(string haystack, string needle) { if (needle.size() == 0) { return 0; } int next[needle.size()]; preKmp(next, needle); int j = -1; for (int i = 0; i < haystack.size(); i++) { while(j >= 0 && haystack[i] != needle[j + 1]) { j = next[j]; } if (haystack[i] == needle[j + 1]) { j++; } if (j == (needle.size() - 1) ) { return (i - needle.size() + 1); } } return -1; } }; ``` > 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。