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只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
最新文章
- java 中的 serialVersionUID
- install openstack on single host
- CG CTF MISC Remove Boyfriend
- Java基础之HashMap流程分析
- 修改数据表部分字段方法封装-及-动态生成对象并动态添加属性
- 【转】温故之.NET 异步
- php curl 批量,关于用php的curl批量抓取内容
- 如何在20分钟内批量部署20台ESXi服务器?
- Spring+SpringMVC+MyBatis+Maven框架整合
- od拦截消息 comboboxonchange_某聊天软件逆向之偷看消息不quot;已读quot;
- H5实现打印电子面单(淘宝菜鸟物流)
- 【UWB】UWB基本定位原理
- 微软的产品激活中心电话
- Excel快速填充列
- 谁能辨我是雄雌?轩墨宝宝个人资料,轩墨宝宝CP照!
- inputBox 与 Application.inputBox 的用法与区别。
- android系统裁剪优化
- 风光过后就崩溃,互联网公司让你心好累
- 30系列NVIDIA显卡安装tensorflow 极简
- 2023在家赚钱怎么做,有什么适合在家做的副业项目
热门文章
- 如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service
- SAP API Business Hub 上测试 API 的一些常见问题
- Adding Applications for JavaScript Storefronts in SAP 电商云
- SAP Spartacus 服务器端渲染文件 server.js 和构建后的 main.js 对比
- SAP Spartacus Visible Focus
- SAP Spartacus的用户登录页面设计
- Kyma registration of webservices and event endpoints
- 把经典的ABAP webdynpro应用配置到SAP Fiori Launchpad里
- BP contact search in Fiori ui
- 使用pscp从windows电脑拷贝数据到linux遇到的ssh_init错误