zoukankan      html  css  js  c++  java
  • KMP算法(C语言版)

    有关字符串匹配的最有效的算法。

    其算法复杂度为两个字符串的长度之和(m+n)。

    #include <stdio.h>
    #include <string.h>
    
    void setnext(char t[], int next[])
    {
        next[0]=-1;
        int i;
        for(i=1; i<strlen(t); i++) {
            int j = next[i-1];
            while(t[i] != t[j+1] && j >= 0)
                j = next[j];
            if(t[i] == t[j+1])
                next[i] = j+1;
            else
                next[i] = 0;
        }
    }
    
    int count_kmp(char s[], char t[], int next[])
    {
        int t_size = strlen(t);
        setnext(t, next);
        int index, count = 0;
        for(index=0; index<strlen(s); ++index){
            int pos = 0;
            int iter = index;
            while(pos<t_size && iter<strlen(s)){
                if(s[iter] == t[pos]){
                    ++iter;
                    ++pos;
                } else {
                    if(pos == 0)
                        ++iter;
                    else
                        pos = next[pos-1] + 1;
                }
            }//whileend
            if(pos==t_size && (iter-index)==t_size)
                ++count;
        }//forend
        return count;
    }
    
    int main(void)
    {
        char s[]="abaabcacabaabcacabaabcacabaabcacabaabcac";
        char t[]="ab";
        int next[strlen(t)];
        int count = count_kmp(s, t, next);
        printf("count=%d
    ", count);
        return 0;
    }

  • 相关阅读:
    自动生成四则运算题目
    学习进度总结随笔
    作业1
    软件工程项目总结
    结对编程项目---四则运算
    作业三
    自动生成小学四则运算题目的程序
    学习进度总结
    大三下自我简介
    寒假社会实*报告
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564924.html
Copyright © 2011-2022 走看看