-
串的存储结构:与线性表相同,分顺序存储结构和链式存储结构。
-
模式匹配:对基于同一字符表的任何文本串T(|T|=n)和模式串P(IPl=m),判定T中是否存在某一子串与P相同。若存在(匹配),则报告该子串在T中的起始位置。
-
蛮力算法(朴素算法):将P与T中长度为m的n-m+1个子串逐一比对。
·时间复杂度:O([n-m+1]*m),渐进O(nm)。
int match(char* P,char* T){
//串匹配算法(Brute-force-1)
size_t n = strlen(T), i = 0;//文本串长度、当前接受比对字符的位置
size_t m = strlen(P), j = 0;//模式串长度、当前接受比对字符的位置
while(j < m && i < n)//自左向右逐个比对字符
if(T[i] == P[j])//若匹配
{
i++; j++;}//则转到下一对字符
else//否则
{
i -= j-1; j = 0;}//文本串回退、模式串复位
return i - j;//如何通过返回值,判断匹配结果?
}
int match(char* P,char* T){
//串匹配算法(Brute-force-2)
size_t n = strlen(T), i=0;//文本串长度、与模式串首字符的对齐位置
size_t m = strlen(P), j;//模式串长度、当前接受比对字符的位置
for(i = 0; i < n - m + 1; i++){
//文本串从第1个字符起,与
for(j = 0;j < m;j++)//模式串中对应的字符逐个比对
if(T