Hiho_1015:KMP算法

来源:互联网 发布:od矩阵模型 编辑:程序博客网 时间:2024/06/06 03:04

1015:KMP 算法

题目解答:

import java.util.Arrays;import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        for (int i = 0; i < n; i++) {            char[] p = scanner.next().toCharArray();            char[] s = scanner.next().toCharArray();            int[] next = new int[10005];            Arrays.fill(next, -1);            getNextVal(p, next);            int count = kmpSearch(s, p, next);            System.out.println(count);        }    }    public static int kmpSearch(char[] s, char[] p, int[] next) {        int i = 0, j = 0;        int sLen = s.length;        int plen = p.length;        int count = 0;            while (i < sLen) {                if (j == -1 || s[i] == p[j]) {                    i++;                    j++;                } else {                    j = next[j];                }                if (j == plen) {                    count++;                    j = next[j];                }            }        return count;    }    public static void getNextVal(char[] p, int[] next) {        int pLen = p.length;        next[0] = -1;        int k = -1;        int j = 0;        while (j < pLen) {            if (k == -1 || p[k] == p[j]) {                k++;                j++;                next[j] = k;            } else {                k = next[k];            }        }    }}
原创粉丝点击