zoukankan      html  css  js  c++  java
  • AcWing 831. KMP字符串(模板)

    给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。

    模板串P在模式串S中多次作为子串出现。

    求出模板串P在模式串S中所有出现的位置的起始下标。

    输入格式

    第一行输入整数N,表示字符串P的长度。

    第二行输入字符串P。

    第三行输入整数M,表示字符串S的长度。

    第四行输入字符串M。

    输出格式

    共一行,输出所有出现位置的起始下标(下标从0开始计数),整数之间用空格隔开。

    数据范围

    1N1041≤N≤104
    1M1051≤M≤105

    输入样例:

    3
    aba
    5
    ababa
    

    输出样例:

    0 2



    #include <iostream>
    
    using namespace std;
    const int maxn = 1e5+10;
    char s[maxn],p[maxn];
    int ne[maxn];
    int main()
    {
        int n,m;
        cin >> n >> p+1 >> m >> s+1;//下标从1开始
        //求next数组
        for(int i=2,j=0;i<=n;i++)
        {
            while(j&&p[i]!=p[j+1]) j=ne[j];
            if(p[i]==p[j+1]) j++;
            ne[i]=j;
        }
        //字符串匹配
        for(int i=1,j=0;i<=m;i++)
        {
            //匹配不成功,字符串后退
            while(j&&s[i]!=p[j+1]) j=ne[j];
            if(s[i]==p[j+1]) j++;
            if(j==n)//匹配成功
            {
                cout << i-n << " ";
                j=ne[j];
            }
        }
        return 0;
    }
  • 相关阅读:
    HttpURLconnection的介绍
    HttpClient4.3教程 第三章 Http状态管理
    HttpClient4.3教程 第二章 连接管理
    HttpClient 4.3教程 第一章 基本概念
    HttpClient 4.3教程-前言
    数据结构
    数据结构
    HashMap底层源码剖析
    防止XSS 攻击集成springboot
    C——Network Saboteur (POJ2531)
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11181546.html
Copyright © 2011-2022 走看看