KMP算法的Java实现
来源:互联网 发布:淘宝客站内推广 编辑:程序博客网 时间:2024/06/05 04:47
输入
第一行一个整数N,表示测试数据组数。
接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。
其中N<=20
输出
对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = Integer.parseInt(sc.nextLine());String pattern = "", str = "";for(int i = 0; i < N; i++){pattern = sc.nextLine();str = sc.nextLine();System.out.println(KMP(pattern, str));}}public static int KMP(String pattern, String str) {int[] next = calNext(pattern);int count = 0, i = 0, j = 0;//初始状态while(i < str.length()){if(str.charAt(i) == pattern.charAt(j)){//当前字符相同if(j == pattern.length() - 1){//匹配成功count++;i++;j = next[j];}else{//继续匹配下一字符i++;j++;}}else{//当前字符不同if(j == 0){//如果已经是模式串的第一个字符i++;}else{j = next[j - 1];}}}return count;}/** * 计算next数组 * @param pattern 模式串 * @return */public static int[] calNext(String pattern) {int[] next = new int[pattern.length()];next[0] = 0;int i = 1, j = 0;while(i < pattern.length()){if(pattern.charAt(i) == pattern.charAt(j)){next[i++] = ++j;}else{if(j == 0){next[i++] = 0;}else{j = next[j-1];}}}return next;}}
阅读全文
0 0
- java实现的KMP算法
- KMP算法的JAVA实现
- Kmp算法的java实现
- KMP算法的java实现
- KMP算法的java实现
- KMP算法的Java实现
- KMP算法的Java实现
- java实现kmp算法
- KMP算法java实现
- Java实现KMP算法
- KMP算法java实现
- KMP算法----java实现
- KMP算法java实现
- KMP算法Java实现
- KMP 算法 java实现
- Java实现KMP算法
- KMP算法Java实现
- KMP算法java实现
- JavaWeb学习十八(util包下的Date和sql包下的Date的转换)
- 一个很智障却很实用的程序(十进制转二进制)
- 根据另外一张表更新已有表字段
- 欢迎使用CSDN-markdown编辑器
- 51Nod-1001 数组中和等于K的数对【排序+二分查找】
- KMP算法的Java实现
- 58 同城 iOS 客户端框架探索
- MVC框架-mentawai(11)
- 【每日一题-2】链表基础面试题
- 创建型:原型模式(Prototype)
- C# 软件间通讯方式之WM_COPYDATA
- if--else的练习,for练习,算法,金字塔,菱形打印
- 15.3Sum
- 泛型的其他应用---------(3)