说实话,学习了这么长时间的数据结构,对于算法的实现能力好像并不强,尤其是一些大师们设计出的算法,例如:kmp算法,普利姆算法,克鲁斯卡尔算法,狄克斯特拉算法等等,说实话我认为知原理是远远不够的,因为只知其原理说明对一个事物的看法只是在一个浅层次里,只有看过了,写过了,调试过了,才算是真正的了解(并不是掌握),真正的掌握是对于前辈们的算法非常熟悉后,能后自己写出更加简洁,在时间空间复杂度上更进一步的算法。
对于下面的程序如果有错误的希望大家批评指正。
该程序的目的:输入两个字符串,并输出其匹配次数和匹配点。
#include<iostream>
#include<string.h>
using namespace std;
void next1(char c[],int []);
int main()
{
char a[1000],b[1000];
int next[100];
int i=0,j=0,c,d,k=0;
gets(a);
gets(b);
c=strlen(a);
d=strlen(b);
next1(b,next);
while(i<c&&j<d)
{
if(j==-1||a[i]==b[j])
{
j++;
i++;
}
else
{ j=next[j];
k++;
}
}
cout<<k+1<<' ';
cout<<i-j+1;
return 0;
}
void next1(char c[],int next[])
{
int b;
b=strlen(c);
next[0]=-1;
int j=0,k=-1;
while(j<b)
{
if(k==-1||c[j]==c[k])
{
k++;
j++;
next[j]=k;
}
else
k=next[k];
}
}
运行结果: