zoukankan      html  css  js  c++  java
  • 字符串匹配

    【题目描述】

    给定两个串A、B,可以得到从A的任意位开始的子串和B匹配的长度。

    给定K个询问,对于每个询问给定一个X,求出匹配长度恰为X的位置有多少个(N,M,K <= 200000)。

    【输入描述】

    第一行输入三个数N、M、K,表示A的长度、B的长度和询问数;

    第二行输入串A;

    第三行输入串B;

    接下来K行,每行输入一个数X。

    【输出描述】

    对于每次询问,输出一个数。

    【样例输入】

    6 2 2

    aabcde

    ab

    0

    2

    【样例输出】

    4

    1

    源代码:
    
    #include<cstdio>
    char S1[200001],S2[200001];
    int n,m,k,Next[200001],Num[200001];
    int main()
    {
        scanf("%d%d%d
    ",&n,&m,&k);
        gets(S1); //gets()读到回车结束。
        gets(S2);
        Next[0]=Next[1]=0;
        for (int a=1;a<m;a++)
        {
            int T=Next[a];
            while (T&&S2[T]!=S2[a])
              T=Next[T];
            Next[a+1]=T+(S2[T]==S2[a]);
        }
        int T(0);
        for (int a=0;a<n;a++)
        {
            while (T&&S1[a]!=S2[T])
              T=Next[T];
            if (S1[a]==S2[T])
              T++;
            Num[T]++;
        }
        for (int a=m;a>0;a--)
          Num[Next[a]]+=Num[a];
        for (int a=0;a<=m;a++)
          Num[a]-=Num[a+1];
        for (int a=1;a<=k;a++)
        {
            int t;
            scanf("%d",&t);
            printf("%d
    ",Num[t]);
        }
        return 0;
    }
  • 相关阅读:
    Linux 笔记
    查看 Linux 系统版本信息
    在网站中添加 https 百度分享
    Linux 中 Xampp 的 https 安全证书配置
    Windows 笔记
    Linux 笔记
    CentOS7 自定义登录前后欢迎信息
    构建器内部的多形性方法的行为
    编译dubbo项目方法
    《Thing in java》多态
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5858847.html
Copyright © 2011-2022 走看看