[TOC]
一、串的存储结构
1.顺序存储
1 | #define MAXLEN 255 //串的最大长度 |
2.链式存储
1 | #define CHUNKSIZE 80 |
二、串的模式匹配算法
1.BF算法
分别利用计数指针i和j,指示主串S和模式T中当前正待比较的字符位置,i初值为pos,j初值为0;
如果两个串均未比较到串尾,即i和j均分别小于等于S和T的长度时,循环执行操作:
S.ch[i]和T.ch[i]比较,若相等,则i和j分别指示串中下一个位置,继续比较后续字符;
若不等,指针后退重新匹配,从主串的下一个字符(i=i-j+2)起再重新和模式的第一个字符(j=0)比较;
如果j>length,说明模式T的每个字符依次和主串S中的一个连续的字符序列相等,则匹配成功,返回和模式T中第一个字符相等的字符在主串S中的符号(i-T.length),否则不成功,返回0。
1 | //算法4.1 BF算法 |
最好情况下的平均时间复杂度是O(n+m);
最坏情况下的平均时间复杂度是O(n*m).
2.KMP算法
特点:指针不需要回溯
1 | //算法4.2 KMP算法 |
1 | //算法4.3 计算next函数值 |