写在本子上了,大致的思想是这样:
代码如下:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
int main()
{
string str = "ABCABDABCABCDD";
string sub = "ABCABC";
vector<int> next;
next.push_back(0);
int p1 = 0, p2 = 1;
int m = sub.length();
int n = str.length();
while (p2 < m)
{
if (sub[p1] == sub[p2])
{
p1++;
p2++;
next.push_back(p1);
}
else {
p1 = 0;
if (sub[p1] == sub[p2])
continue;
else
{
p2++;
next.push_back(p1);
}
}
}
for (int i = 0; i < m; i++)
{
cout << next[i]<<" ";
}
cout << endl;
p1 = 0, p2 = 0;
for (int i = 0; i < n+3; i++)
{
if (str[p1] == sub[p2])
{
p1++; p2++;
if (p2 == m)
{
cout << p1 - m << endl;
break;
}
}
else
{
if (p2 == 0)
p1++;
else
{
p1 = p1 - p2 + (p2 - next[p2-1]);
p2=0;
}
}
}
system("pause");
return 0;
}