KMP算法真是刷一次忘一次 #include<bits\stdc++.h> using namespace std; void get_next(vector<int>& next, 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 find(string haystack, string needle){vector<int> next=vector<int>(needle.size());get_next(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()){cout<<i-needle.size()+1;break;}} } int main(){string str1="aabaabaaf";string str2="aabaaf"; // vector<int> next=vector<int>(str1.size()); // get_next(next,str1); // for(int num:next){ // cout<<num<<" "; // }find(str1,str2);system("pause"); }