zoukankan      html  css  js  c++  java
  • KMP字符串查找

    kmp查找首先要创建next数组

    next数组中装的是最大前缀和后缀相等的数量

    然后进行KMP查找,代码如下

    int KMP(char* str,int length1,char* arr,int length2)
    {
        if(str == NULL || arr == NULL || length1 <= 0 || length2 <= 0) return -1;
        //创建next数组
        char* pNext = (char*)malloc(sizeof(char)*length2);
        memset(pNext,0,sizeof(char)*length2);
        int j;
        for(int i=1;i<length2;i++)
        {
            //如果这个元素和他应该比较的元素相等
            if(arr[pNext[i-1]] == arr[i])
            {
                pNext[i] = pNext[i-1]+1;
            }
    
            //如果不相等,再向前找,直到找到pNext[0]
            else
            {
                j = pNext[i-1];
                while(j != 0 && arr[pNext[j-1]] != arr[i])
                    j = pNext[j-1];
    
                //判断循环跳出的条件
                if(j == 0)
                {
                    if(arr[0] != arr[i])
                        pNext[i] = 0;
                    else
                        pNext[i] = 1;
                }
                else
                    pNext[i] = pNext[j-1]+1;
    
            }
        }
        //遍历
        //index是小字符串的下标
        int index = 0;
        int i;
        for(i=0;i<length1;i++)
        {
            //如果相等两个指针一起向后移动
            if(str[i] == arr[index])
            {
                index++;
                if(index == length2)
                    break;
            }
            else
            {
                //调整第二个指针的位置
                while(index != 0 && str[i] != arr[index])
                {
                    index = pNext[index-1];
                }
                //向前找到匹配的
                if(str[i] == arr[index])
                    index++;
            }
        }
    
        return i-index+1;
    
    
    }
  • 相关阅读:
    表空间_oracle
    linux_1_Wed May 15 10:18:56 CST 2019
    玩oracle vm virtualBox+mac电脑+isomini7centos
    字符串比较用equal以及==的区别
    送货地图中的数据库操作

    健康,有度
    qa角色记一次测试过程回溯
    jmeter计数器的使用
    jmeter解析response里的json对象和数组
  • 原文地址:https://www.cnblogs.com/TheQi/p/9151965.html
Copyright © 2011-2022 走看看