首页 > 其他分享 >KMP

KMP

时间:2022-11-14 14:47:20浏览次数:40  
标签:ps int ne br KMP new readLine

Java代码

import java.io.*;

/**
 * @author jeffery.ma
 * @date 2022/10/24 13:56
 */

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        String ps = ' ' + br.readLine();
        int m = Integer.parseInt(br.readLine());
        String ss = ' ' + br.readLine();
        int[] ne = new int[ps.length()];
        char[] p = ps.toCharArray();
        char[] s = ss.toCharArray();
        for (int i = 2, j = 0; i <= n; i ++) {
            while (j > 0 && 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 > 0 && s[i] != p[j + 1]) j = ne[j];
            if (s[i] == p[j + 1]) j ++;
            if (j == n) {
                bw.write(i - n + " ");
                j = ne[j];
            }
        }
        bw.flush();
    }
}

标签:ps,int,ne,br,KMP,new,readLine
From: https://www.cnblogs.com/antidogmatist/p/16888971.html

相关文章

  • AC 自动机——trie 树与 KMP 算法的结合体
    默认所有字符串的下表从\(1\)开始。梗概与实现如果是单一的模式串和字符串进行匹配,KMP算法自然可以派上用场。但如果有多个模式串呢?对每个模式串都跑一遍KMP?如果有......
  • KMP——字符串匹配的利器
    默认所有字符串的下标从\(1\)开始。\(\text{KMP(Knuth-Morris-Pratt)}\)算法,能够在\(O(|s|+|p|)\)的时间复杂度内求出模式串\(p\)在文本串\(s\)中的出现次数、......
  • KMP算法
    KMP算法是一个字符串匹配算法,或者说是一个子字符串匹配算法算法在字符串str中搜索子串pattern,如果存在,返回这个子串的起始索引,如果不存在,返回-1暴力枚举匹配暴力的字符......
  • 关于KMP的应用几例
    信息竞赛中,KMP大概是字符串方面最经典的算法了。参考了部分代码,KMP的写法大概有两种在原有字符串上进行KMP#include<bits/stdc++.h>usingnamespacestd;constint......
  • kmp板子
    主串a,模式串b,求b在a中出现的位置 #include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=1e6+4;intla,lb;intf[N],p[N]......
  • 【模板】Z 函数(扩展 KMP)
    postedon2022-08-0823:29:53|under模板|source#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;typedeflonglongLL;intn,......
  • KMP 自动机,孤独的自动机(同时也是CF1721E的题解)
    给定字符串\(s\),以及\(q\)个串\(t_i\),求将\(s\)分别与每个\(t_i\)拼接起来后,最靠右的\(|t_i|\)个前缀的border长度。询问间相互独立。\(|s|\leq10^6,q......
  • KMP算法
    见csdn博主v_JULY_v的详解如下:https://blog.csdn.net/v_JULY_v/article/details/7041827?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221667467393168001806......
  • HDU 1686Oulipo ———————Hash or KMP
    OulipoOulipoTimeLimit:3000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):22302    AcceptedSubmission(s):86......
  • 学习笔记:KMP
    引入KMP是一种字符串匹配算法,可以在将近线性的时间复杂度内进行字符串匹配。此类问题通常有一个文本串$S$和一个模式串$P$构成,说白了就是在$S$中匹配$T$,S.find(T)......