1. 项目概述
今天要分享的是LeetCode第28题"找出字符串中第一个匹配项的下标"的C语言实现方案。这道题看似简单,但却是字符串匹配领域的经典问题,在文本编辑器、数据库查询、病毒检测等场景中都有广泛应用。
作为C语言开发者,掌握多种字符串匹配算法不仅能提升解题效率,更能深入理解计算机处理文本数据的底层逻辑。我将从最基础的暴力匹配开始,逐步深入到标准库函数strstr的实现原理,最后剖析高效的KMP算法,带大家彻底吃透这道题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 暴力匹配法实现
2.1 算法原理与实现
暴力匹配(Brute-Force)是最直观的字符串匹配方法,其核心思想是:
- 从主串的第一个字符开始,逐个与模式串比较
- 发现不匹配时,主串回溯到本次匹配起始位置的下一个字符
- 重复上述过程直到找到匹配或遍历完主串
c复制int strStr(char* haystack, char* needle) {
int len1 = strlen(haystack);
int len2 = strlen(needle);
if(len2 == 0) return 0;
if(len1 < len2) return -1;
for(int i = 0; i <= len1 - len2; i++) {
int j;
for(j = 0; j < len2; j++) {
if(haystack[i+j] != needle[j])
break;
}
if(j == len2)
return i;
}
return -1;
}
2.2 时间复杂度分析
最坏情况下(如主串"aaaaaab",模式串"aaab"),时间复杂度为O((n-m+1)*m),其中n是主串长度,m是模式串长度。当模式串较短时效率尚可,但随着字符串长度增加,性能会急剧下降。
提示:实际工程中,当处理超过1MB的文本时,不建议使用纯暴力匹配算法。
3. 使用标准库函数strstr
3.1 strstr函数的基本用法
C标准库<s
