第一种 暴力移位(效率低,资源浪费)

第二种KMP算法

这是直接盗用老师ppt中的内容,意思大家明白就好了,看代码:

public class KMP {

public int Index_KMP(String str1,String str2){

int i=0,j=-1;

int

arr[]=get_next(str2);

while(i

if(j==-1||str1.charAt(i)==str2.charAt(j)){

i++;

j++;

}

else j=arr[j];

}

if(j==str2.length())

return i-j;

return

-1;

}

public int[] get_next(String str){

int j=-1,i=0;

int

arr[]=new int[str.length()+1];

arr[0]=-1;

while(i

if(j==-1||str.charAt(i)==str.charAt(j)){

j++;

i++;

arr[i]=j;

}

else

j=arr[j];

}

return arr;

}

public static void main(String[]args)

{

KMP kmp=new KMP();

String T="abcac";

String s="ababcabcacbab";

int temp=kmp.Index_KMP(s,

T);

System.out.println();

System.out.println(temp);

}

}

​有的书中或许是数组表示,这里直接用String是一样,有的可能是数组中t[0]保存的是数组的长度,这里是-1的处理。

例如判断一个字符串是不是另一个字符串的旋转,就可以利用KMP算法,具体解答步骤:

java kmp算法_java实现KMP算法相关推荐

  1. java gc回收算法_Java GC回收算法-判定一个对象是否可以回收

    开源推荐 推荐一款一站式性能监控工具(开源项目) Pepper-Metrics是跟一位同事一起开发的开源组件,主要功能是通过比较轻量的方式与常用开源组件(jedis/mybatis/motan/dub ...

  2. 6种java垃圾回收算法_Java垃圾回收算法

    主要根据以下3篇博客做的整理 http://blog.csdn.net/zsuguangh/article/details/6429592 http://www.cnblogs.com/ywl925/ ...

  3. 垃圾回收算法_Java 垃圾回收算法与几种垃圾回收器

    一.如何确定某个对象是"垃圾"? 目前主流垃圾回收器都采用的是可达性分析算法来判断对象是否已经存活,不使用引用计数算法判断对象时候存活的原因在于该算法很难解决相互引用的问题.如何确 ...

  4. java数据结构 队列_Java数据结构与算法[原创]——队列

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本文介绍数据结构中的队列(queue)的概念.存储结构.队列的特点,文末给出ja ...

  5. java常用算法_JAVA编程常用算法——冒泡排序

    一.冒泡排序算法运作的过程 (1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. (3 ...

  6. java 性能 排序_Java常用排序算法及性能测试集合

    package algorithm.sort; import java.lang.reflect.Method; import java.util.Arrays; import java.util.D ...

  7. java setlt;intgt;_java使用Nagao算法实现新词发现、热门词的挖掘

    采用Nagao算法统计各个子字符串的频次,然后基于这些频次统计每个字符串的词频.左右邻个数.左右熵.交互信息(内部凝聚度). 名词解释: Nagao算法:一种快速的统计文本里所有子字符串频次的算法.详 ...

  8. java密码学原型算法_java密码学原型算法实现——双线性对.pdf

    java密码学原型算法实现--双线性对 Java 密码学原型算法实现--双线性对 1.背景介绍 如何使用jPBC 库进行双线性群初始化,包括: (1)质数阶双线性群(Prime-Order Bilin ...

  9. java遍历字符串_Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题

    一.算法基础 1. 重建二叉树 题目: 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树. 注意: 二叉树中每个节点的值都互不相同: 输入的前序遍历和中序遍历一定合法: 演示: 给定: 前序遍历 ...

最新文章

  1. 什么是假设检验(hypothesis test)?什么是正态性检验(normality test)?
  2. rnn按时间展开_作词家下岗系列:教你用 RNN 算法做一个写词软件
  3. Cygwin的安装,卸载,以及安装gdb
  4. C++ 如何一次在堆上申请4G的内存?如何设计一个类只能在堆或者栈上创建对象?
  5. Visual Studio 2017 新功能(上)
  6. 2-05 使用固态存储SSD或PCIe卡
  7. .NET的轻量级IOC框架芮双随笔
  8. Part3.Android基础知识 - 四大基本组件与常用控件完全解析
  9. 使Android 自带SDK 完美支持HTML5 之 html5webview
  10. IDA远程调试Android中so文件
  11. VoxelNet:End-to-End Learning for Point Cloud Based 3D Object Detection阅读笔记
  12. Ajax Loading进度条gif在线生成网站Preloaders.net
  13. 2018最新完整版黑马安卓android第52期(基础+就业班)61G打包
  14. android11系统原生铃声,原生系统的凤毛麟角 索尼Xperia 1 II推送Android 11体验
  15. MATLAB线性规划整数变量,Matlab 整数线性规划问题模型代码
  16. 关于三星Galaxy S8最好的(和最坏的)事情
  17. 软件供应链安全——组件漏洞的治理
  18. Android开发实用小技巧九——内嵌WebView的使用(内置浏览器)
  19. 分享免费与收费的主流报表工具推荐
  20. python PIL库安装

热门文章

  1. C# LINQ 多表查询
  2. 转按揭贷款系统开发-充分管控业务各节点
  3. Janis 4K闭循环低温恒温器
  4. bonding mode 4 测试
  5. java需要有哪些特点_java特点有哪些
  6. java中打印靠左三角形,java控制台打印三角形区域
  7. 【基础篇】MySQL系列之分组和聚合函数组合使用
  8. “ChatGPT之父”勇闯币圈!数十亿人的空投计划,只需交出你的虹膜?
  9. Android更新圆点代码,Android实现两圆点之间来回移动加载进度
  10. jieba库与中文分词