开发者社区> 问答> 正文

在主字符串中查找子串的KMP算法?和字符串中查找字符用KMP算法的C语言代码

在主字符串中查找子串的KMP算法?和字符串中查找字符用KMP算法的C语言代码

展开
收起
知与谁同 2018-07-20 09:58:01 3746 0
1 条回答
写回答
取消 提交回答
  • /***KMP算法是对蛮力算法的优化,原理很简单。但存在最坏情况,时间复杂度很可能会崩坏到O(m+n)。
    * 推荐在高频度数据查找采用优化的Boyer-Moore算法。
    *以下为代码
    ***/
    /***首先创建一个ADT,这里给出最简形式,省略部分涉及不到的操作***/
    ADT String
    {voidStrAssign(SString &T,char*S)//值为S的串T
    bool SreEmpty(SString &S) //判断空串
    int StrLength(SString &s) //返回长度
    void Concat (SString &T,SString&S1,SString &S2)//返回组合的新串
    void SubString (SString &Sub,SString &S,int pos, int len)//同串则返回第pos后的串的最初位置,否则为0

    }
    /***算法部分***/
    int KMP(char *T,char *p)
    {int n=strlen(T);
    int m=strlen(P);
    int i,j;
    for(i=0;i<n-m;i++)
    {j=0;
    while(j<m&&T[i+j]==P[j])j++;
    if(j==m) return i;
    }
    return -1}
    2019-07-17 22:55:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载