12. 字符串匹配
习题
#31201
⚡4⏳4
使用 KMP 算法在字节序列中查找模式第一次出现的位置:
c
#include <stdbool.h>
#include <stddef.h>
bool find_subsequence_u8(
const unsigned char *text,
size_t text_count,
const unsigned char *pattern,
size_t pattern_count,
size_t *out_index
);1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
要求:
- 模式为空时位置为 0;文本为空且模式非空时位置为
SIZE_MAX。 - 输入是任意字节序列,不得调用依赖结尾空字节的字符串函数;长度为 0 时对应指针可以为
NULL。 - 找不到模式时成功返回并设置
*out_index = SIZE_MAX;参数无效或前缀表分配失败时返回false,输出对象保持不变。 - 构造前缀函数表并保证时间复杂度为
,额外空间复杂度为 。