字符串的模式匹配本文先实现最基本的回溯实现的已经KMP算法,BM算法后面博文继续实现。ps:本篇博文强烈参考了July大神的作品,地址http://blog.csdn.net/v_july_v/article/details/6545192.再次感激大神~~

1.最基本的回溯实现字符串模式匹配

package com.sheepmu;public class KMPText
{public static void main(String[] args){String s0="abcdeabckkfgh";String s1="abck";char[] as0=s0.toCharArray();char[] as1=s1.toCharArray();System.out.println(getIndex(as0,as1));}public static int getIndex(char[] as0,char[] as1){int len0=as0.length;int len1=as1.length;int i=0,j=0;while(i<len0&&j<len1){if(as0[i]==as1[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j>=len1){return i-j;}return -1;}
}

2.KMP算法实现字符串模式匹配

package com.sheepmu;public class KMPText
{public static void main(String[] args){String s0="abcdeabckkfgh";String s1="abcke";char[] as0=s0.toCharArray();char[] as1=s1.toCharArray();System.out.println(getKMP(as0,as1));}public static int[] next(char[] as1){int[] next=new int[as1.length];next[0]=-1;int len1=as1.length;int i=0,j=-1;while(i<len1-1)//!!!!!!!!!!!!!记得-1{if(j==-1||as1[i]==as1[j]){i++;j++;if(as1[i]!=as1[j]){next[i]=j;           }else{next[i]=next[j];}}else{j=next[j];}}return next;}public static int getKMP(char[] as0,char[] as1){         int len0=as0.length;int len1=as1.length;int i=0,j=0;int[] next=next(as1);while(i<len0&&j<len1){if(j==-1||as0[i]==as1[j]){i++;j++;}else{j=next[j];}}if(j>=len1){return i-j;}return -1;}
}

转载于:https://www.cnblogs.com/oversea201405/p/3766892.html

KMP算法----java实现相关推荐

  1. 字符串匹配算法(KMP算法JAVA版)

    目录 暴力匹配 KMP算法 暴力匹配 暴力算法就是 普通模式的匹配算法 bf算法就是将目标的字符串 的第一个字符与模式的第一个字符进行匹配,相等的话就继续比较第二个字符是否是匹配的,依次进行下去,如果 ...

  2. KMP算法 java版本

    1 原理  参考 <大话数据结构>第5章 串 的第5.7小节 : KMP模式匹配算法 2 java代码 KMP.java package leaning.string.KMP;public ...

  3. 详解KMP算法原理,以及完整java与C++实现

    点击此处学习更多算法与通信知识 作者 | labuladong 来源 | labuladong KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实 ...

  4. 经典KMP算法C++与Java实现代码

    前言: KMP算法是一种字符串匹配算法,由Knuth,Morris和Pratt同时发现(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.比 ...

  5. KMP算法中next数组的理解与算法的实现(java语言)

    KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧. 计算前缀 Next[i] 的值: ...

  6. Java 字符串匹配的KMP算法

    package Four;import java.util.Scanner;/**** 字符型的kmp算法* @author bai* 描述:* 给你一个文本串,再给你一个模式串,* 文本串中有多少个 ...

  7. Java数字匹配的kmp算法

    package Four; /**** 研究kmp算法(数字之间的匹配模式)* @author bai* 题目描述:给你两个数字序列,你的任务是在序列a中* 找到和序列b完全匹配的子串,如果有多个匹配 ...

  8. 【Java数据结构与算法】第十八章 动态规划和KMP算法

    第十八章 动态规划和KMP算法 文章目录 第十八章 动态规划和KMP算法 一.动态规划 1.介绍 1.爬楼问题 2.扔鸡蛋问题 3.背包问题 二.KMP算法 1.引入 2.介绍 2.代码实现 一.动态 ...

  9. java实现kmp_java 实现KMP算法

    KMP算法是一种神奇的字符串匹配算法,在对 超长字符串 进行模板匹配的时候比暴力匹配法的效率会高不少.接下来我们从思路入手理解KMP算法. 在对字符串进行匹配的时候我们最容易想到的就是一个个匹配,类似 ...

最新文章

  1. 由于不知线程池的bug,某Java程序员叕被祭天
  2. php 简单的解密和加密
  3. DeepLearning索引
  4. 卷积滤波 英文_《信号与系统》专业术语中英文对照表
  5. python中为什么训练数据_python训练数据时打乱训练数据与标签
  6. pandas缺失值处理
  7. 【注意力机制】CBAM详解
  8. UE4之wgs84坐标系
  9. 最新信恒第四方支付系统源码+服务器直接打包
  10. 项目启动会发言稿(范文二)
  11. 2022年GPS广播星历精密星历如何下载
  12. android下拉菜单总结
  13. 计算机安装win10系统还原,详细教您win10怎么还原成win7
  14. linux查看当前网卡网速,Linux环境编程:获取网卡的实时网速
  15. 微信内分享域名防红方案-微信域名防封跳转技术的方案解析_微信域名防封推广源码
  16. LiveNVR传统安防摄像机互联网直播-二次开发相关的API接口
  17. 北京建行个人信贷客户资信调查函.doc
  18. AES AES/GCM/NoPadding 加密解密
  19. 用python统计你的文章里每个英文单词的数量
  20. FPGA 电路开发入门实验

热门文章

  1. remmina连接xfce桌面的centos7
  2. 学习10:Python重要知识
  3. hive 动态分区实现 (hive-1.1.0)
  4. [LeetCode] 547. Friend Circles Java
  5. 二叉树学习笔记--先序遍历
  6. iOS: 图解Xcode常用的快捷键
  7. 网络抓包工具--网路岗
  8. linux-tar命令详解
  9. 《redis 设计与实现》读书笔记
  10. springcloud gateway 使用nacos 作为配置中心 和 注册中心