您的位置:首页 > 理论基础 > 数据结构算法

SDUT 3311 数据结构实验之串三:KMP应用

2016-06-19 16:42 323 查看
点击打开题目链接

#include <bits/stdc++.h>
#define N 1000010
using namespace std;

int next
;
int _array1
, _array2
;
void  _find(int lenth1, int lenth2);
void creat_next(int lenth1);

int main()
{

int n, m;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> _array1[i];
}
cin >> m;
for(int i = 0; i < m; i++)
{
cin >> _array2[i];
}
creat_next(m);
_find(n, m);
}

void creat_next(int lenth)
{
int j = -1, k = 0;
next[0] = -1;
while(k < lenth)
{
if(j == -1 || _array2[j] == _array2[k])
{
++ j;
++ k;
next[k] = j;
}
else
{
j = next[j];
}
}
}

void  _find(int lenth1, int lenth2)
{
int i = 0, j = 0, flag = 0;
while(i < lenth1 && j < lenth2)
{
if(j == -1 || _array1[i] == _array2[j])
{
++ j;
++ i;
}
else
j = next[j];
if(j == lenth2)
{
j = 0;
flag ++;
}
}
if(flag == 1)
{
cout << i-lenth2+1 << ' ' << i << endl;
}
else
{
cout << -1 << endl;
}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp