zoukankan      html  css  js  c++  java
  • 找出所有和模式串匹配的字符串的起始下标

    /*找出所有和模式串匹配的字符串的起始下标*/
    #include <iostream>
    using namespace std;
    void getNext(char *p,int *next)
    {
        int j,k;
        next[0]=-1;
        j=0;
        k=-1;
        while(j<strlen(p)-1)
        {
            if(k==-1||p[j]==p[k])    //匹配的情况下,p[j]==p[k]
            {
                j++;
                k++;
                next[j]=k;
            }
            else                   //p[j]!=p[k]
                k=next[k];
        }
    }
    void getNextA(char *p,int *next)
    {
        next[0]=-1;
        next[1]=0;
        for (int i=2;i<=strlen(p);i++)
        {
            int j=i-1;
            int k=next[j];
            while (true)
            {
            
                if (p[i-1]==p[k])
                {
                    next[i]=next[j]+1;
                    break;
                }
                else
                {
                    if (k==0)
                    {
                        next[i]=0;
                        break;
                    }
                    else
                    {
                        j=k;
                        k=next[j];
                    }
                }
            }
        }
    }
    
    
    void main()
    {
        char* str="acac";
        int a[100];
        getNextA(str,a);
        for (int i=0;i<=strlen(str);i++)
        {
            cout<<a[i]<<"  ";
        }
        cout<<endl;
    
        char* detstr="acacacacbacacacacb";
        i=0;int j=0;
        while(i<strlen(detstr))
        {
            if (j==strlen(str))
            {
                cout<<i-strlen(str)<<endl;
                j=a[j];
            }
            if (detstr[i]==str[j])
            {
                i++;j++;
            }
            else
            {
                j=a[j];
                if (j==-1)
                {
                    i++;
                    j=0;
                }
            }    
        }
        if (j==strlen(str))
        {
            cout<<i-strlen(str)<<endl;
        }
    }
  • 相关阅读:
    linux 查看系统版本
    SSL协议详解
    DIV+CSS圆角边框
    初识CoreData与详解
    initWithCoder: 与initWithFrame:的区别
    RAC初体验
    NSNotificationKVOlockdelegate的区别和用法
    Objective-O Runtime 运行时初体验
    UUID
    Swift微博编写感
  • 原文地址:https://www.cnblogs.com/GoAhead/p/2658049.html
Copyright © 2011-2022 走看看