KMP算法
来源:互联网 发布:java面试专业技能 编辑:程序博客网 时间:2024/05/22 15:22
//长度为n的主串T中匹配长度为m的子串P (n>=m)。//匹配成功:存在P的每个字符依次和T中的一个连续字符序列相等//输出主串中匹配串起始位置,匹配失败输出-1//思路://首先用O(m)的时间对子串进行预处理,可通过子串本身的特性判断出需要右移几位才是可能匹配的//然后用O(n)的时间去完成匹配//时间复杂度: O(m+n)#include<stdio.h>#include<string.h>//失配函数//f[i]表示状态i失配时应转移到新的状态,特别注意f[0]=0//根据f[0],f[1],...,f[i-1]递推f[i]void getFail(char* P, int* f){int m=strlen(P);//递推边界初值f[0]=0;f[1]=0;for(int i=1;i<m;i++){int j=f[i];while(j && P[i]!=P[j])j=f[j];f[i+1]= P[i]==P[j]?j+1:0;}}int find(char* T, char* P, int* f){int n=strlen(T),m=strlen(P);getFail(P, f);//当前结点编号,初始为0号结点int j=0;//主串当前指针for(int i=0;i<n;i++){//顺着失配边走,直到可以匹配while(j && P[j]!=T[i])j=f[j];if(P[j]==T[i])j++;//找到if(j==m)return i-m+1;}return -1;}int main(){char T[100],P[100];int f[100];scanf("%s",T);scanf("%s",P);int ans = 0;ans=find(T,P,f);printf("%d\n",ans);return 0;}
0 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- [UVALive5058] Counting BST && 计数DP + BST
- 01背包
- 1036. Boys vs Girls (25)
- 定位不到元素的原因
- CAKeyframeAnimation简单旋转动画
- KMP算法
- PIC(programmable interrupt controller),可编程中断控制器。
- POJ 2253 Frogger(kuangbin带你飞 专题四:最短路)
- 将sql的多行查询结果拼接成一个字符串
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- n后问题
- API实例快速参考
- Java实现: 把二元查找树转变成排序的双向链表(树)
- 青島信用卡套現l5l652496O7