java kmp算法_KMP算法java版实现
import java.util.Arrays;
public class KMP {
private static int[] prefixTable;
/**
* 部分匹配表
* @param t
* @return
*/
public int[] getPrefixTable(char[] t){
int n = t.length;
int len;//匹配位置
prefixTable = new int[n];
prefixTable[0] = 0;
for(int i = 1;i < n;i++){
len = prefixTable[i - 1];
while(true){
if(t[len] == t[i]){
len++;
prefixTable[i] = len;
break;
}else{
if(len > 0)//下一个比较位置
len = prefixTable[len - 1];
else{
prefixTable[i] = 0;//
break;
}
}
}
}
return prefixTable;
}
public int[] match(char[] s,char[] t){
int[] result = new int[s.length];//记录所有匹配的子串
int count = 0;
int j = 0;//记录子串匹配位置
for(int i = 0;i < s.length;i++){
if(s[i] == t[j]){//相等
if(j == t.length - 1){//子串匹配完毕,记录位置,并且j=0找下一个匹配的子串
result[count++] = i - t.length + 1;
j = 0;
}else{//子串匹配位置加1
j++;
}
}else{
if(j > 0){//如果子串位置>0
j = prefixTable[j - 1];//不匹配的话从匹配表里面找到子串新的匹配位置
i--;//接着比较
}
}
}
return result;
}
public static void main(String[] args) {
KMP kmp= new KMP();
char[] s = "ABCDAB ABCDABCDABDEABCDABD".toCharArray();
char[] t = "ABCDABD".toCharArray();
kmp.getPrefixTable(t);
int index[] = kmp.match(s, t);
System.out.println(Arrays.toString(index));
}
}
输出结果
[11, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
java kmp算法_KMP算法java版实现相关推荐
- 常用十大算法_KMP算法
KMP算法 FBI提示:KMP算法不好理解, 建议视频+本文+其他博客,别走马观花 KMP算法是用于文本匹配的算法,属于模式搜索(pattern Searching)问题的一种算法,在讲KMP算法之前 ...
- IDEA配置java《算法》第四版环境(耗时6小时,总算配置成功了,希望能给大家一点帮助)
0.前言 最近在学java语言,然后想用java语言来学习算法,在网上听说看<算法>第四版学习java算法不错,于是就去下载了<算法>电子书来啃 今天看到了用java java ...
- 经典KMP算法C++与Java实现代码
前言: KMP算法是一种字符串匹配算法,由Knuth,Morris和Pratt同时发现(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.比 ...
- 数据结构与算法基础(java版)
目录 数据结构与算法基础(java版) 1.1数据结构概述 1.2算法概述 2.1数组的基本使用 2.2 数组元素的添加 2.3数组元素的删除 2.4面向对象的数组 2.5查找算法之线性查找 2.6查 ...
- java动态分区分配算法,操作系统_动态分区分配算法课程设计_java版
<操作系统_动态分区分配算法课程设计_java版>由会员分享,可在线阅读,更多相关<操作系统_动态分区分配算法课程设计_java版(13页珍藏版)>请在人人文库网上搜索. 1. ...
- java动态分区分配_操作系统 动态分区分配算法课程设计 java版.pdf
操作系统 动态分区分配算法课程设计 java版 湖 南 文 理 学 院 实 验 报 告 课程名称 操作系统课程设计 实验名称 存储管理--动态分区分配算法的模拟 成绩 学生姓名 曹乐 专业 计算机 班 ...
- 计算车号Java,汽车VIN码校验算法 java版
汽车17 位vin 码校验算法 1.[代码][Java]代码 import java.util.HashMap; import java.util.Map; public final class Vi ...
- java动态分区分配_操作系统动态分区分配算法课程设计java版解析.doc
湖 南 文 理 学 院 实 验 报 告 课程名称 操作系统课程设计 实验名称 存储管理--动态分区分配算法的模拟 成绩 学生姓名 曹乐 专业 计算机 班级.学号 13101 18 同组者姓名 实验日期 ...
- java青蛙过河打字_趣味算法——青蛙过河(JAVA)
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
最新文章
- [导入]ExtJs 2.0 弹窗事例
- 初谈SQL Server逻辑读、物理读、预读
- Android之集成微信登录
- Javascript深入浅出
- 论文笔记之:End-to-End Localization and Ranking for Relative Attributes
- Docker学习笔记之保存和共享镜像
- 历年软件设计师下午考试试题汇总统计(更新至2016年上半年)
- 1030 Travel Plan (30 分) 【难度: 中 / 知识点: 最短路】
- Jenkins 设置镜像_Windows Docker Agent 镜像可以常规使用了
- linux uid 内核,Linux内核学习笔记: uid之ruid,euid,suid
- python怎么连接MongoDB数据库
- 阿里云、小米、华为手机竞争对比初评
- c程序设计第五版谭浩强课后答案 第四章习题答案
- 北京租房住起来舒服的地方(小区)有哪些?
- xss.haozi练习通关详解
- 关于IDEA中使用git更新代码,会覆盖掉未提交的新代码解决问题
- 八边形类 Octagon
- 微信小程序自动保留空格换行
- Self6D: Self-Supervised Monocular 6D Object Pose Estimation论文翻译
- 无线局域网和蜂窝移动网络_广场无线AP覆盖系统解决方案
热门文章
- TypeScript里对数组元素的自定义属性排序的实现原理
- SAP Spartacus使用到的技术栈
- jasmine里不同it spec之间的测试隔离性
- nz-input-group is not a known element的解决方法
- jsp项目手动导出成war包
- SAP扫盲系列之二:SAP ABAP应用服务器的组成部分
- SAP Commerce Cloud(原Hybris)和SAP Cloud for Customer(C4C)的SQL trace工具
- how is crmd_product_i inserted to db
- Angular self study 1 - Bootstrap
- Cloud for Customer的前台请求是怎么发送到后台的