字符串问题 【微软面试100题 第八十五题】
题目要求
已知一个字符串,比如adserwsde,寻找其中的一个子字符串比如sde的个数,如果没有就返回0,有的话返回子字符串的个数。
题目分析
对KMP算法稍加修改一下就行:在应该返回字符串的地方进行计数。
代码实现
#include <stdio.h> #include <string.h> void compute_prefix(int *next, char *p); int kmp_match(char *text, char *p, int *next); int main() { int next[101], n; char *p = "caca" ; char *text = "abcacacaca" ; compute_prefix(next, p); printf( "num = %d\n",kmp_match(text, p, next)); return 0; } void compute_prefix(int *next, char *p) { int i, n, k; n = strlen(p); next[1] = next[0] = 0; k = 0; /* 第i 次迭代开始之前, k表示next[i-1] 的值*/ for (i = 2; i <= n; i++) { if (p[k] == p[i-1]) k++; else k = 0; next[i] = k; } } int kmp_match(char *text, char *p, int *next) { int m, n, s, q,num=0; m = strlen(p); n = strlen(text); q = s = 0; /* q表示上一次迭代匹配了多少个字符, s 表示这次迭代从 text的哪个字符开始比较*/ while (s < n) { for (q = next[q]; q < m && p[q] == text[s]; q++, s++); if (q == 0) s++; else if (q == m) { num++; next[q] = 0;//一定要清零,不然输出个数会增加 } } return num; }
很多时候不是我们做不好,而是没有竭尽全力......
分类:
【微软面试100题】
posted on 2014-11-25 23:23 tractorman 阅读(207) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?