• 我的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;
    }
    


  • 相关阅读:
    做一名让开发佩服的测试(浅析)
    软件测试行业—职业发展之路(浅谈)
    移动端APP测试总结
    Http协议!(转)
    移动App书写Test Case时需要考虑的检查点
    黑盒测试方法——边界值分析(转)
    黑盒测试方法——等价类划分(转)
    在线网络实用工具
    Android Monkey压力测试(转)
    软件工程(浅谈)
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/6260745.html
Copyright © 2020-2023  润新知