zoukankan      html  css  js  c++  java
  • 我的kmp笔记

    在str中找ttr第一次出现的位置,没找到就是-1,

    bf算法暴力匹配

    int BF(char s[], char p[])
    {
        int m, n,i,j;
        m = strlen(s);
        n = strlen(p);
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < n; j++)
            {
                if(s[i + j] != p[j])
                    break;
                if( j == n - 1)
                {
                    return i;
                }
            }
        }
        return -1;
    }

    kmp算法FJUTACM2149

    #include<stdio.h>
    #include<string.h>
    char s1[1000005],s2[1000005];
    int next[1000005];
    void get_next(char s[])///求next数组
    {
        int i=0,j=-1;
        next[0]=-1;     ///虽然while第一次填next[0]=-1,但是去掉会死循环
        int len=strlen(s);
        while(i<len)
        {
            if(j==-1||s[i]==s[j])
            {
                i++;
                j++;
                ///特例优化 aaaaab 匹配aaaaax时b-x匹配失败,回溯
                if(s[i]!=s[j])
                {
                    next[i]=j;
                }
                else
                {
                    next[i]=next[j];
                }
            }
            else
            {
                j=next[j];
            }
        }
    }
    int kmp(char *str,char *ttr)
    {
        int i=0,j=0;
        int len1=strlen(str),len2=strlen(ttr);///strlen返回值unsigned放在while会出错
        while(i<len1&&j<len2)
        {
            if(j==-1||str[i]==ttr[j])
            {
                i++;
                j++;
            }
            else
            {
                j=next[j];
            }
        }
        if(j==len2)///succeed
        {
            return i-j;
        }
        else///failed
            return -1;
    }
    int main()
    {
        while(~scanf("%s%s",s1,s2))
        {
            memset(next,0,sizeof(next));
            get_next(s2);
            printf("%d
    ",kmp(s1,s2));
        }
        return 0;
    }
    


  • 相关阅读:
    pytest ini配置文件格式
    C#星辰之路
    bootstrap
    rabbitmq 安装
    curl 下载文件
    mysql 面试题
    mvn --version
    后台运行的nohup vs &
    scp
    linux下.tar.gz和.gz文件解压详解
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/6260745.html
Copyright © 2011-2022 走看看