zoukankan      html  css  js  c++  java
  • KMP

    KMP:字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。

    #include<iostream>
    //#include<cstring>
    using namespace std;
    int next[1000];
    void NEXT(string b)
    {
        //memset(next,-1,sizeof(int));
        int i,k=-1;
        next[0]=-1;
        for(i=1;i<b.size();i++)
        {
            while(k>-1&&b[k+1]!=b[i]) //这个while循环是KMP的重点
            k=next[k];
            if(b[k+1]==b[i]) k++;
            next[i]=k;
         }
    }
    int main()
    {
        int i,k=-1,f;
        string a,b;
        while(cin>>a,a!="*")
        {
            f=-1;
            cin>>b; 
            NEXT(b);
            /*for(int i=0;i<b.size();i++)
            printf("%d
    ",next[i]);*/  //测试next
            //以下开始两个字符串比较
            for(i=0;i<a.size();i++)
            {
                while(k>-1&&b[k+1]!=a[i]) //这个while循环是KMP的重点 
                k=next[k];
                if(b[k+1]==a[i]) k++;
                if(k==b.size()-1) 
                {
                    f=i-b.size()+1;
                    break;
                }
            }
            printf("%d
    ",f);
        } 
    }
  • 相关阅读:
    RecyclerView 源码分析(一) —— 绘制流程解析
    sqlserver outer join
    获取最后一个标签 xpath
    pytesseract
    pytesseract代码优化
    sql server recursion
    sql
    sql server
    mssql乱码问题
    SQL
  • 原文地址:https://www.cnblogs.com/mayouyou/p/9097773.html
Copyright © 2011-2022 走看看