1 知识框架
2 存储结构
- 定长顺序存储
typdef struct string
{
char ch[MaxSize]; //MaxSize = 255
int length;
}String;
- 堆分配存储
typdef struct string
{
char *ch;
int length;
}*String
- 块链存储
3 模式匹配算法
3.1 模式匹配
int mp (Sting s,String T)
{
int i = 0,j = 0;
while(i < S.length && j < T.length)
if(S.ch[i] == T.ch[j])
{
i ++;
j ++;
}
else
{
i = i - j + 1;
j = 1;
}
if(j == T.length)return i - T.length;
else return 0;
} //暴力匹配 一个一个的进行比较 十分浪费时间和空间
3.2 kmp
// kmp 核心代码
if (j == -1 || s[i] == p[j])
{
i++;
j++;
}
else
{
//如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]
//next[j]即为j所对应的next值
j = next[j];
}
next 数组:
void next(string pp)
{
int len = pp.size();
//cout<<len<<" ";
n[0] = -1;
int k = -1,j = 0;
while(j < len - 1)
{
if(k == -1||pp[j] == pp[k]){
++ j;
++ k;
n[j] = k;
}
else {
k = n[k];
}
}
}
nextval(下次再写)