第五章、字符串
第五章、字符串
一、串的模式匹配算法:
1、Brute-Force模式匹配算法:
是对主串和模式串的遍历匹配。
时间复杂度理论上在o(m*n),通常情况下,实际运行过程中,该算法的执行时间近似于o(m+n)
#include<stdio.h> struct String{ char a[20]; int length; }; int indexstring(String s,String t,int pos=1){ char *p,*q; int k,j; k=pos-1; j=0; p=s.a+pos-1; q=t.a; while ((k<s.length)&&(j<t.length)) { if(*p==*q) { //如果匹配,就一直前进 p++;q++;k++;j++; }else{ //如果不匹配,主串向前移j-1个,模式串移到开头,这就是最浪费时间的地方,kmp算法在这里改进 k=k-j+1;j=0;q=t.a; p=s.a+k; } } if(j==t.length){ return(k-t.length); }else return (-1); } int main(){ String s; scanf("%s",s.a); String t; scanf("%s",t.a); int i=0; for(;s.a[i];i++); s.length=i; int j=0; for(;t.a[j];j++); t.length=j; printf("%d\n",indexstring(s,t)); }
2、即kmp算法,可以在0(m+n)的时间数量级上完成串的模式匹配操作。
其思想是每当一趟匹配过程中出现字符不相等时,主串显示器不用回溯,而是利用已经得到的“部分匹配”结果,将模式串的指示器向右“滑动”尽可能远的一段距离后,继续进行比较。
这个解释比较详细