重点简要:
1、串(又叫字符串)中的字符数目n称为串的长度,零个字符的串称为空串。
2、串的比较:
s=“hap “,t=” happy “,s<t。
s=”happen”,t=”happy”,s<t。
3、串的顺序存储结构,以\0作为串值的终结。
4、朴素的模式匹配算法:子串的定位操作通常称做串的模式匹配。
5、主串S和子串T的长度存在S[0]和T[0]中。
6、KMP模式匹配算法中next数组
|---- 0 (当j =1时)
Next[ j ]= | Max { k|1<k<j ,且‘p1…pk-1’=’pj-k+1…pj-1}此集合不为空。
|---- 1 (其他情况)
7、next数组的推导
J
123456
模式串T
abcabx
Next [ j ]
011123
注意:J由1到j-1的串
8、前后缀一个字符相等,k=2,两个字符相等k=3,n个相等k=n+1。
9、计算出当前要匹配的串T的next数组(KMP模式匹配算法实现)
void get_next(String T,int *next) { int i,j; i=1; j=0; next [1]=0; while(i<T[0]) { if(j==0||T[i]==T[j]) { ++i; ++j; Next[ i ]=j; } else j=next[j]; } }10、nextval版(KMP模式匹配算法改进)
J
123456789
模式串T
Ababaaaba
Next[j]
011234223
Nextval[j]
010104210
代码:
void get_next(String T,int *nextval) { int i,j; i=1; j=0; nextval[1]=0; while(i<T[0]) { if(j==0||T[i]==T[j]) { ++i; ++j; if(T[i]!=T[j]) nextval[i]=j; else nextval[i]=nextval[j]; Next[ i ]=j; } else j=nextval[j]; } }