#1015 : KMP算法

来源:互联网 发布:火车票抢购软件 编辑:程序博客网 时间:2024/05/29 07:01

kmp用得不熟练!!!


import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main {public static int max = 10010;public static int[] next = new int[max];public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);int N = scanner.nextInt();scanner.nextLine();String pattern;String lineString;for (int i = 0; i < N; i++) {pattern = scanner.nextLine();lineString = scanner.nextLine();getNext(pattern);int count = getMatchCount(pattern, lineString);System.out.println(count);}}private static int getMatchCount(String pattern, String lineString) {// TODO Auto-generated method stubint i = 0, j = 0, cnt = 0;int count = 0;if (lineString.length() < pattern.length()) {return 0;}while (i < lineString.length()) {if <span style="color:#ff0000;">(j == -1 </span>|| lineString.charAt(i) == pattern.charAt(j)) {i++;j++;}else {j = next[j];}if (j == pattern.length()) {count++;<span style="color:#ff0000;">j = next[j];</span>}}return count;}private static void getNext(String pattern){int pLen =pattern.length();next[0] = -1;int k = -1;int j = 0;while (j < pLen) {if (k == -1 || pattern.charAt(j) == pattern.charAt(k)) {k++;j++;next[j] = k;}else {k = next[k];}}}}


0 0
原创粉丝点击