根据算法思路自己实现了kmp算法(未优化)

本文介绍了一种经典的字符串搜索算法——KMP算法,并通过C++代码实现了该算法。具体包括next数组的构造方法及其如何帮助提高模式匹配效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贴一下代码,日后再补充。

每一天都在尝试提高对计算机的兴趣,羡慕那些感兴趣、努力并且效率很高的程序员或准程序员,处于尴尬境地的我也只能默默努力!马上就大三了,不想一直高不成低不就的。




/** dandelion
 *
 * 20170807
 * kmp算法
 *
 */
#include <iostream>
#include<string>
using namespace std;
/**< len:匹配字符串的长度 */
void getNext(int *next,string shortStr,int len){
    /**q:匹配字符串截取长度*/
    int q = 2;

    for(;q<=len; q++)
    {
        for(int i=1 ;i<q; i++)
        {
            if(  shortStr.substr(0,i) == shortStr.substr(q-i,i) )/**比较前i位与后i位是否相同*/
                next[q-1]=i;/**前后缀相同的长度*/
        }
    }
}
/**< */
int Kmp(int *next,string longStr,string shortStr,int *rezult ,int lenLong,int lenShort)
{
    int i = 0;
    int Long = lenLong;
    int Short = lenShort;
    int loc = 0;/**< len:目标字符串的位置*/
    int q = 0;/**< 匹配字符串的位置*/
    while(loc<Long)
    {
        q=0;
        while(q<Short)
        {
            if(longStr[loc]!=shortStr[q])/**< 匹配不成功时,目标字符串位置根据next【】向后移动*/
            {
                loc=loc-next[q]+1;
                break;
            }
            else
            {
                q++;
                loc++;
            }
        }
        if(q==Short)
            rezult[i++]=loc-Short;
    }
    return i;
}
int main()
{
    string longString("babcbabcabcaabcabcabcacabc");
    string shortString("abcabcacab");
    int lenLong = longString.length();
    int lenShort = shortString.length();
    int next[lenShort]={0};
    int result[20];
    getNext(next,shortString,lenShort);/**计算next数组*/
    int x = Kmp(next,longString,shortString,result,lenLong,lenShort);
    for(int i = 0 ; i < x; i++)
        cout<<result[i]<<" ";
    //for(int i = 0; i<lenShort; i++)
    //    cout<<next[i]<<" ";
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值