KMP算法之查找模式串在源串中出现的次数
2014-10-30 23:27
183 查看
问题描述:
给定两个字符串T, P。查找字符串P在字符串T中出现的次数。
解决方法:
典型的KMP算法的题目,在此使用的KMP算法为算法导论上介绍的算法。下一篇文章将详细介绍KMP算法的计算过程。
题目链接:
http://hihocoder.com/problemset/problem/1015
源代码如下:
给定两个字符串T, P。查找字符串P在字符串T中出现的次数。
解决方法:
典型的KMP算法的题目,在此使用的KMP算法为算法导论上介绍的算法。下一篇文章将详细介绍KMP算法的计算过程。
题目链接:
http://hihocoder.com/problemset/problem/1015
源代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define M 9999 #define N 999999 char t , p[M]; int *getprefix(char p[]) { int *h, plen, k, i; plen = strlen(p); h = (int *)malloc(plen*sizeof(int)); h[0] = 0; k=0; for(i=1; i<plen; i++) { while(k>0 && p[k]!=p[i]) k=h[k-1]; if(p[k] == p[i]) k++; h[i]=k; } return h; } int kmp_matcher(char t[], char p[]) { int count; int *h, tlen, plen, i, q; tlen = strlen(t); plen = strlen(p); h = getprefix(p); count = 0; q=0; for(i=0; i<tlen; i++) { while(q>0 && t[i]!=p[q]) q = h[q-1]; if(t[i] == p[q]) q++; if(plen == q) { count++; q = h[q-1]; } } return count; } int main() { int n, ans; scanf("%d\n",&n); while(n--) { gets(p); gets(t); ans = kmp_matcher(t, p); printf("%d\n", ans); } return 0; }
相关文章推荐
- KMP算法之查找模式串在源串中出现的次数
- (串的模式匹配4.6.2)POJ 3461 Oulipo(KMP算法的应用——求一个单词在一行文本中的出现次数)
- KMP算法求模式串在原串中出现的次数
- 从字符串中查找字符出现次数的方法和性能对比
- 从字符串中查找字符出现次数的方法和性能对比
- 查找字符串中某字符出现次数的方法
- 基本的命令查找文本中某个词的出现次数
- 从字符串中查找字符出现次数
- 练习2-4:编一个程序统计文件中特定单词出现的次数(要求使用string类的运算符==来查找单词) .
- 转一个贴 以备查找 RedHat Linux 9.0命令行模式下出现乱码的解决办法
- 从字符串中查找字符出现次数的方法和性能对比
- 查找字符串中出现次数最多的字符
- 从字符串中查找字符出现次数的方法和性能对比
- 查找某个字符在字符串中出现的次数
- 查找一个字符串里,出现次数最多的字符,时间复杂度O(n)
- ASP.NET从字符串中查找字符出现次数的方法
- 从字符串中查找字符出现次数的方法和性能再比
- 从字符串中查找字符出现次数的方法和性能再比
- 用递归实现查找字符串中相同字符连续出现次数的最大值
- 查找字符串中指定字符出现的次数:性能比较