如果看了我部落格介紹還沒懂kmp,則下面鏈結拿好。
超好的kmp詳解
kmp詳解2
鏈結一鏈結二
擴充套件kmp
劉雅瓊ppt
擴充套件kmp 鏈結二
hdu 2087 剪花布條 求匹配次數(不可重疊)
#include #include #include #include #include using namespace std;
const int maxn = 1000 + 5;
int nxt[maxn];
void getnext(string s)
else j = nxt[j];
}}int kmp(string s1, string s2)
}return cnt;
}int main()
return 0;
}
poj 3461 oulipo
求匹配的次數(可重疊),跟上面的區別就是匹配成功後跳到 next[j] 而非0
#include #include #include #include #include #include using namespace std;
#define re freopen("in.txt","r",stdin);
const int maxn = 1e5 + 5;
const int inf = 0x3f3f3f3f;
int nxt[maxn];
void getnext(string s)
}int kmp(string s1, string s2)
}return cnt;
}int main()
return 0;
}
hdu 2594 simpsons』 hidden talents
題意:給定字串s1和s2,求s1的最長字首s,這個s是s2的字尾
思路:將s1和s2連起來,且用不會出現的字元隔開,得到長度為n的新串,求新串kmp裡的next陣列,答案就是next[n]
next[i]代表了以s[i-1]為結尾的滿足字首串和字尾串相同的最長字串的長度(如acbacb: 最後個b下標為5,則next[5]=2,因為最前面有ac,b的前2個也是ac)
之所以要隔開,是防止next的值大於min(s1長度,s2長度),求得的s長度肯定最多是min(s1長度,s2長度)【如s1=aaa,s2=aaa】
#include #include #include #include #include #include #include #include #include using namespace std;
#define ll long long
#define eps 10^(-6)
#define q_cin ios::sync_with_stdio(false)
#define rep( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define for( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define clr( a , x ) memset ( a , x , sizeof (a) )
#define re freopen("1.in","r",stdin);
#define we freopen("1.out","w",stdout);
#define mod 10009
#define nmax 10002
#define min(a,b) ((a)>(b)?(b):(a))
#define max(a,b) ((a)<(b)?(b):(a))
int next[50005<<1];
void get_next(string s1)
else
k = next[k];
}}int main()
return 0;
}
字串KMP 一些題
利用失配陣列nxt 最長的乙個 前字尾 是1 nxt n 那麼下乙個是多少?includeusing namespace std define rg register const int n 1000000 5,m 10000 5,inf 0x3f3f3f3f,p 99999997 int l,j,...
一些擴充套件kmp的總結
花了一天多時間學了下ex kmp。可以看劉雅瓊的 ppt,講的非常清楚 我的寫法是 next i p i.m 1 與 p 0.m 1 的最長公共字首 ex i t i.n 1 與 p 0.m 1 的最長公共字首 我的小模板 html view plain copy 擴充套件kmp next i p ...
KMP中的一些技巧( )
以下是我看的描述最小迴圈節能讓我看懂的一篇部落格 先簡單介紹一下kmp演算法利用 nxt 陣列求最小迴圈節的原理 假設圖中的黑色是原來的字串,現在要求最小迴圈節,對於nxt len 來說指的是圖中藍色和黃色的長度,而且藍色和黃色是相等的,那麼綠色和紫色也是相等的,對比原串可知紫色跟粉色是相同的子串,...