package com.trs.utils;

public class KMPStr {
/*
* 在KMP算法中,最难求的就是next函数,如何理解next函数是一个难题,特别是k=next[k],这里
* 需要指出的是当p[i]!=p[j]时,我们只有通过回溯将k的值逐渐减小,貌似类似与用到了动态规划的思想 参考网上阮一峰老师的博客讲解的十分详细
*/
private static int[] getNext(String t) {
int[] next = new int[t.length()];
next[0] = -1;
int j = 0;
int k = -1;
while (j < t.length() - 1) {
if (k == -1 || t.charAt(j) == t.charAt(k)) {
j++;
k++;
next[j] = k;
} else {
k = next[k];
}
}
for (int i : next) {
System.out.print(i + ":");
}
System.out.println();
return next;
} public static int kmpStrIndex(String s, String t, int[] next) {
int i = 0;
int j = 0;
while (i < s.length() && j < t.length()) {
if (j == -1 || s.charAt(i) == t.charAt(j)) {
i++;
j++;
} else {
// i不变,j后退
j = next[j];
}
if (j == t.length()) {
return i - j;
}
}
return -1;
} }

最新文章

  1. [LeetCode] Min Stack 最小栈
  2. 怎样获取Windows平台下SQL server性能计数器值
  3. 基于tomcat-jQ-springMVC-bootstrap的公司产品管理WEB应用
  4. [LeetCode] Longest Consecutive Sequence
  5. 每天学点GDB 13
  6. Quartz与Spring集成
  7. 根据Android架构分层推荐开发书籍
  8. SVN安装详解
  9. Am命令
  10. JSON带来编程界怎样的描述
  11. android--graphics
  12. SQL 设计心得、逗号分隔列表
  13. 警告: git command could not be found. Please create an alias or add it to yo
  14. codewars-random(4)
  15. ADO.NET 扩展属性、配置文件 和 对战游戏
  16. iOS开源加密相册Agony的实现(四)
  17. ado.net的简单数据库操作(三)——简单增删改查的实际应用
  18. C# System.Threading.AutoResetEvent
  19. 面向对象【day08】:静态方法、类方法、属性方法(九)
  20. three.js 相机camera位置属性设置详解

热门文章

  1. Tomcat v7.0 Server at localhost are already in use,tomcat提示端口被占用,tomcat端口已经被使用,tomcat端口占用
  2. ABAP 通过sumbit调用另外一个程序使用job形式执行-简单例子
  3. 将int,bigint整型数值可逆转换字符串
  4. Mutex的使用方法以及封装的AutoLock介绍(转载)
  5. find指令
  6. Thread.Sleep(0) vs Sleep(1) vs Thread.Yeild()
  7. StringBuilder跟StringBuffer
  8. python3 数据类型
  9. c#的as关键字
  10. ie Css Hack 特殊符号