kmp模版

 1 class Solution {
 2 public:
 3     vector<int> next;
 4     void getNext(string s,vector<int>& next)
 5     {
 6         int j=0,k=-1;
 7         next[0]=-1;
 8         while(j<s.size()-1)
 9         {
10             if(k==-1 || s[j]==s[k])
11             {
12                 j++;
13                 k++;
14                 if(s[j]==s[k])
15                 {
16                     next[j]=next[k];
17                 }
18                 else
19                     next[j]=k;
20             }
21             else
22                 k=next[k];
23         }
24     }
25     bool kmp(string s,string t,vector<int>& next)
26     {
27         int j=0,k=0;
28         int m=s.size();
29         int n=t.size();
30         while(j<m && k<n)
31         {
32             if(k==-1 || s[j]==t[k])
33             {
34                 j++;
35                 k++;
36             }
37             else
38             {
39                 k=next[k];
40             }
41             
42         }
43         if(k>=t.size())
44             return true;
45         
46         return false;
47     }
48     bool repeatedSubstringPattern(string s) {
49         int n=s.size();
50         next.resize(n,0);
51         getNext(s,next);
52 
53         return kmp(s.substr(1)+s.substr(0,s.size()-1),s,next);
54     }
55 };

 

posted @ 2020-08-24 12:36  czhWellOptimized  阅读(152)  评论(0)    收藏  举报