1. KMP 算法(字符串匹配算法)较 BF(朴素的字符串匹配)算法有哪些改进

1) 在主串和子串匹配的过程中,主串不再回退,只改变子串的比较位置。

2) 为子串生成对应的next数组,每次匹配失败,通过访问next数组获知子串再一次开始匹配的位置。

2.  在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的

前缀。

因此KMP算法的思想就是:在匹配过程称,若发生不匹配的情况,如果next[j]>=0,则目标串的指针i不变,将模式串的指针j移动到next[j]的位置继续进行匹配;若next[j]=-1,则将i右移1位,并将j置0,继续进行比较。

public class KMP {
public static void main(String[] args) {
String a="aawsadabbb";
String b="abb";
System.out.println(KMP(a,b));
}
public static int KMP(String s,String t ){
int i=0;
int j=0;
int []next=getNext(t);
while (i<s.length()&&j<t.length()){
if(j==-1||s.charAt(i)==t.charAt(j)){
i++;j++;
}else {
j=next[j];
}
}
if(j==t.length()){
return i-j;
}else {
return -1;
}
}
// 求取next数组
private static int[] getNext(String t) {
int k=-1;
int j=0;
int []next=new int[t.length()];
next[0]=-1;
while (j<t.length()-1){
if(k==-1||t.charAt(k)==t.charAt(j)) {
k++;
j++;
next[j]=k;
}else {
k=next[k];
}
}
return next;
}
}

Java KMP算法代码的更多相关文章

  1. KMP算法代码

    以下是本人根据上一篇博客随笔http://www.cnblogs.com/jiayouwyhit/p/3251832.html,所写的KMP算法代码(暂未优化),个人认为在基于上一篇博客的基础上,代码 ...

  2. 【原创】KMP算法代码(C)

    //s是模式字符串,t是匹配字符串(可以看我上一篇文章中的叙述) int KMP(const char * s , const char * t) { int slen = strlen(s) , t ...

  3. 【编程练习】kmp算法代码

    代码来自: http://blog.csdn.net/v_JULY_v #include "StdAfx.h" #include <iostream> using na ...

  4. KMP算法以及优化(代码分析以及求解next数组和nextval数组)

    KMP算法以及优化(代码分析以及求解next数组和nextval数组) 来了,数据结构及算法的内容来了,这才是我们的专攻,前面写的都是开胃小菜,本篇文章,侧重考研408方向,所以保证了你只要看懂了,题 ...

  5. kmp算法简明教程

    在字符串s中寻找模式串p的位置,这是一个字符串匹配问题. 举例说明: i = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 s = a b a a c a b a a a b a a ...

  6. 查找子字符串----KMP算法深入剖析

    假设主串:a b a b c a b c a c b a b      子串:a b c a c 1.一般匹配算法 逐个字符的比较,匹配过程如下: 第一趟匹配 a b a b c a b c a c ...

  7. 利用KMP算法解决串的模式匹配问题(c++) -- 数据结构

    题目: 7-1 串的模式匹配 (30 分) 给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串 ...

  8. 一个方便的java分页算法

    一个好用的java分页算法,代码如下,只需要分页参数继承Pageable类就可以很方便分页了 package cn.com.base.common.pagination; /** * 分页基类 * * ...

  9. 字符串模式匹配算法1 - BF和KMP算法

    在字符串S中定位/查找某个子字符串P的操作,通常称为字符串的模式匹配,其中P称为模式串.模式匹配有多种算法,这里先总结一下BF算法和KMP算法. 注意:本文在讨论字符位置/指针/下标时,全部使用C语法 ...

随机推荐

  1. 前端移动端开发总结(Vue)

    上下固定,中间滚动布局(FLEX) <div id="app"> <div class="header"></div> &l ...

  2. 实现一个EventEmitter类,这个类包含以下方法: on/ once/fire/off

    实现一个EventEmitter类,这个类包含以下方法: on(监听事件,该事件可以被触发多次)- once(也是监听事件,但只能被触发一次)- fire(触发指定的事件)- off(移除指定事件的某 ...

  3. Centos7系统安装笔记

    Centos 7安装步骤 对应参数,可修改 1.一台主机对应一个服务器,需要先安装Centos 7(内网)2.F12 boot 进入boot模式3.选择安装方式:USE或其他4.根据底部文字提示,点击 ...

  4. docker build 时 alpine 无法安装软件问题的解决

    使用 alpine 作为 docker 基础镜像时,运行 apk add ..... 遇到如下错误: WARNING: Ignoring http://dl-cdn.alpinelinux.org/a ...

  5. 转。Nas配置。想找原版没找到,全是转载的,也没注出处,无语。

    随着家用宽带的不断提速和高清电影的普及外带单反的家庭占有率越来越搞,仅靠台式机里那几块硬盘越来越不够用了. 简单的计算了一下,家里的台式机上2T的容量(1T+640G+320G)已经接近于80%满,外 ...

  6. 【JS学习】慕课网4-1编程挑战 函数

    要求:小伙伴们,请编写"改变颜色"."改变宽高"."隐藏内容"."显示内容"."取消设置"的函数,点 ...

  7. asp.net网站Application_Start疑是不执行的现象

    今天遇见了一个很诡异的事情,发布了新代码后,发现在Application_Start中读取的一些配置参数变为空了,最开始我以为是什么特殊的原因程序没有执行Application_Start,导致它们的 ...

  8. 项目实战 - 混合式App开发

    为何要使用混合式开发? 要说为什么使用Hybrid App [混合式开发],就要先了解什么是Native App[原生程序], Web App[网站程序]. Native App 是专门针对某一类移动 ...

  9. shell脚本进行设置启动/关闭

    vi /etc/init.d/confluence ----------------------------- #!/bin/bash# chkconfig: 2345 85 15# Provides ...

  10. Delphi 鼠标控制函数GetCursorPos、SetCursorPos

    GetCursorPos函数  获取鼠标的位置 var P: TPoint; begin GetCursorPos(P); //获取鼠标位置 end; SetCursorPos函数 设置鼠标的位置 v ...