java70分,最后有两个超时了,要怎么优化哇求教
查看原帖
java70分,最后有两个超时了,要怎么优化哇求教
155180
lanxii楼主2023/3/15 22:52
import java.util.*;
import java.io.*;

public class Main {
	static Scanner sca = new Scanner(new BufferedInputStream(System.in));
	
	public static void main(String[] args) {
			String t1 = null, t2 = null;
			t1 = sca.next(); t2 = sca.next();

			int lena = t1.length(); 
			int lenb = t2.length();
			char[] b = new char[lenb + 2];
			char[] a = new char[lena + 2];
			a = t1.toCharArray(); b = t2.toCharArray();
			
			int[] nxt = new int[lenb + 2];
			nxt[0] = -1;
			int j = -1;
			for(int i = 1; i < lenb; i++) {
				while(j > -1 && b[j + 1] != b[i])
					j = nxt[j];
				if(b[j + 1] == b[i])
					++j;
				nxt[i] = j;
			}
			
			int[] f = new int[lena + 2];
			f[0] = 0;
			j = -1;
			for(int i = 0; i < lena; i++) {
				if(j == lenb - 1)
					j = nxt[j];
				while(j > -1 && b[j + 1] != a[i])
					j = nxt[j];
				if(b[j + 1] == a[i])
					++j;
				f[i] = j;
			}
			
			int ans = 0;
			for(int i = 0; i < lena; i++)
				if(f[i] == lenb - 1)
					System.out.println(i - lenb + 2);
			for(int i = 0; i < lenb; i++)
				System.out.printf("%d ", nxt[i] + 1);
			
	}
}
2023/3/15 22:52
加载中...