zoukankan      html  css  js  c++  java
  • hdu-1711(kmp)

    题意:给你两串数字,问你第二串数字第一次出现在第一串数字的位置,没有输出-1;

    解题思路:其是就是字符串匹配,就是这里是数字匹配,把char数组改成int型就可以了;

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #define M 10050
    #define N 1005000
    using namespace std;
    int next1[M];
    int s[N];
    int t[M];
    int slen,tlen;
    void get_next()
    {
        int j,k;
        k=-1;j=0;next1[0]=-1;
        while(j<tlen)
        {
            if(k==-1||t[k]==t[j])
            {
                next1[++j]=++k;
            }
            else
                k=next1[k];
        }
    }
    int kmp_pos()
    {
        int i,j;
        i=0;j=0;
        get_next();
        while(i<slen&&j<tlen)
        {
            if(j==-1||s[i]==t[j])
            {
                i++;j++;
            }
            else
                j=next1[j];
        }
        if(j==tlen)
            return i-tlen+1;
        return -1;
    }
    int main()
    {
        int tt;
        scanf("%d",&tt);
        while(tt--)
        {
            scanf("%d%d",&slen,&tlen);
            for(int i=0;i<slen;i++)
                scanf("%d",&s[i]);
            for(int j=0;j<tlen;j++)
                scanf("%d",&t[j]);
            printf("%d
    ",kmp_pos());
        }
    }
    

      

  • 相关阅读:
    Docker
    Alfred Workflow
    AWS Lambda
    XPath
    WebMagic
    Splash
    Selenium
    代理服务器
    JSONPath
    Sqlserver 查询分组 记录
  • 原文地址:https://www.cnblogs.com/huangdao/p/9280619.html
Copyright © 2011-2022 走看看