2023数据结构考研复习-串
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2023数据结构考研复习-串相关的知识,希望对你有一定的参考价值。
2023数据结构考研复习-串(四)
串的定义
#define MaxLen 255
typedef struct
char ch[MaxLen]; // 定长顺序表存储
int length;
string;
// 动态分配
typedef struct
char *ch; // 按照串长度分配存储区,ch指向串的基地址
int length;
string;
// 链式存储
typedef struct
char ch[4]; // 每个节点存多个字符
struct Node * next; // 指针大小是4字节
string;
bool substring(SStirng &sub, SString S, int pos, int len)
if (pos+len-1 > S.length)
return 0;
for (int i = pos; i < pos + len; i++)
sub.ch[i-pos+1] = s.ch[i];
return 1;
int strCompare(SString S, SString T)
for (int i = 1; i <= S.length && i <= T.length; i++)
if (S.ch[i] != T.ch[i])
return S.ch[i] - T.ch[i];
return S.length - T.length;
int index(SString S, SString T)
int i = 1, n = length(S), m = length(T);
SString sub;
while (i <= n-m+1)
substring(sub, S, i ,m);
if (strCompare(sub, T) != 0)
i++;
else
return i;
return 0;
朴素匹配
int index (String s, String t)
int i = 1. j = 1;
while (i <= s.length && j <= t.length)
if (s[i] == t[j])
i++;
j++;
else
i = i - j + 2;
j = 1;
if (j > t.length)
return i - t.length;
else
return 0;
int index (String s, String t)
int i = 1. j = 1;
for (int i = 0; i < s.length; i++)
bool falg = 1;
for (int j = 0; j < t.length; j++)
if (s[i+j] != t[j])
flag = 0;
break;
if (flag)
return i;
return -1;
KMP
int kmp (Stirng S, String T, int next[])
int i = 1, j = 1;
while (i <= S.length && j <= T.length)
if (S[i] == S[j])
i++;
j++;
else
j = next[j]; // 模式串向右移动
if (j > T.length)
return i - T.length;
else
return 0;
int[] getNext(String s)
int next[s.length+1];
i = 0, j = -1;
next[0] = -1;
while (i < s.length)
if (j == -1 || s[i] == s[j])
i++;
j++;
next[i] = j;
else
j = next[j];
// 优化
void get_nextval(String T, int nextval[])
int i = 1, j = 0;
nextval[1] = 0;
while (i < T.length)
if (j == 0 || T[i] ==T[j])
i++;
j++;
if (T[i] != T[j])
nextval[i] = j;
else
nextval[i] = nextval[j];
else
j = nextval[j];
KMP应用
【冬令营 Winter Camp】字符串专题(Triple语言版)
LeetCode 28. 实现 strStr() 字符串匹配(BP&KMP)
加油!
感谢!
努力!
以上是关于2023数据结构考研复习-串的主要内容,如果未能解决你的问题,请参考以下文章