求助_第三个subtask超时
查看原帖
求助_第三个subtask超时
26950
KN1FEAX楼主2021/1/28 00:52

import java.util.Scanner;

public class Main {
	public static int[] getNextArray(char[] t) {
		int len = t.length;
		int[] next = new int[len + 1];	
		int i = 0, j = -1;
		next[0] = -1;
		while (i < len) {
			if (j == -1 || t[i] == t[j]) {
				next[++i] = ++j;
			} else
				j = next[j];
		}
		return next;
	}

	public static int kmpMatch(String s, String t) {
		char[] s_arr = s.toCharArray();
		char[] t_arr = t.toCharArray();
		int[] next = getNextArray(t_arr);
		int lens = s.length();
		int lent = t.length();
		int i = 0, j = 0;
		while (i < lens && j < lent) {
			if (j == -1 || s_arr[i] == t_arr[j]) {
				j++;
				i++;
			} else
				j = next[j];
			if (j == lent) {
				System.out.println(i - j + 1);
				j = next[j];
			}
		}
		for (i = 1; i <= lent; i++)
			System.out.print(next[i] + " ");
		return 1;
	}

	public static void main(String[] args) {
		String s,t;
		Scanner cin = new Scanner(System.in);
		s=cin.next();
		t=cin.next();
		kmpMatch(s,t);
	}

}

11和13个测试点都是1.2S

因为准备java赛道所以要改板子,从cpp移植过来发现炸了,求助各位带哥Orz

2021/1/28 00:52
加载中...