KMP算法

来源:互联网 发布:高端 商务礼品 知乎 编辑:程序博客网 时间:2024/06/08 19:19
// KMP.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;void next(char * s1, int* next, int n);int _tmain(int argc, _TCHAR* argv[]){/*char s1[50];char s2[50];int n = 0;cin >> s1;cin >> s2;cin >> n;int j = 0;int i = 0;for (; i<50 && s1[i] != '\0' && s2[j] != '\0'; i++){if (s1[i] == s2[j]){j++;}else{i = i - j;j = 0;}}if (j == n){cout << i - j << endl;}*///cout<<s1 <<"\t"<<s2<<endl;char s1[50];char s2[50];int n = 0;cin >> s1;cin >> s2;cin >> n;int nexts[50];next(s1, nexts, n);int j = 0;int i = 0;for (; i<50 && s1[i] != '\0' && s2[j] != '\0'; i++){if (s1[i] == s2[j]){j++;}else{i = i - j;j = nexts[j];}}if (j == n){cout << i - j << endl;}system("pause");return 0;}void next(char * s1,int* next,int n){int k = 0;next[0] = 0;for (int i = 1; i < n; i++){k = next[i - 1];while (k>0 && s1[k]!=s1[i] ){k = next[k-1];}if (s1[k] == s1[i]){k++;}next[i] = k;}}

0 0
原创粉丝点击