子字符查找KMP算法 - 子串自匹配索引表
public static int[] kmpTable(char[] seq) {
int[] tbl = new int[seq.length];
tbl[0] = 1;
for (int i = 1; i < seq.length; i++) {// 子串最开始
int j = tbl[i - 1];// 从已经算出的索引开始
l1: for (; j <= i; j++) {
for (int k = 0; j + k <= i; k++) {
if (seq[j + k] == seq[k] && j + k == i) {
break l1;// 完全匹配
} else if (seq[j + k] != seq[k] && k >= 1)// 子串内部自匹配
j += tbl[k - 1];
}
}
tbl[i] = j;
}
return tbl;
}
public static int[] kmpTable(char[] seq) {
int[] tbl = new int[seq.length];
tbl[0] = 1;
for (int i = 1; i < seq.length; i++) {// 子串最开始
int j = tbl[i - 1];// 从已经算出的索引开始
l1: for (; j <= i; j++) {
for (int k = 0; j + k <= i; k++) {
if (seq[j + k] == seq[k] && j + k == i) {
break l1;// 完全匹配
} else if (seq[j + k] != seq[k] && k >= 1)// 子串内部自匹配
j += tbl[k - 1];
}
}
tbl[i] = j;
}
return tbl;
}
子字符查找KMP算法 - 子串自匹配索引表的更多相关文章
- 字符串匹配KMP算法详解
1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有比较详细的通俗易懂的讲解,另一方面也怪自己没有沉下心来研究.最近在leetcode上又遇见字符串匹配的题目,以此 ...
- 字符串匹配KMP算法的讲解C++
转自http://blog.csdn.net/starstar1992/article/details/54913261 也可以参考http://blog.csdn.net/liu940204/art ...
- c算法:字符串查找-KMP算法
/* *用KMP算法实现字符串匹配搜索方法 *该程序实现的功能是搜索本目录下的所有文件的内容是否与给定的 *字符串匹配,如果匹配,则输出文件名:包含该字符串的行 *待搜索的目标串搜索指针移动位数 = ...
- 字符串匹配--kmp算法原理整理
kmp算法原理:求出P0···Pi的最大相同前后缀长度k: 字符串匹配是计算机的基本任务之一.举例,字符串"BBC ABCDAB ABCDABCDABDE",里面是否包含另一个字符 ...
- 字符串匹配——KMP算法
关于KMP算法的分析,我觉得这两篇博客写的不错: http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html ht ...
- 字符串匹配KMP算法的C语言实现
字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...
- 字符串查找KMP算法(转)
如果你用过ctrl+F这个快捷键,那么你有很大的概率使用过这个算法,这就是在待查找字符串(可能有成千上万个字符)中找出模式串(比较小,可能有几个字符),可能找到大于或者等于1次的位置.例如,在abab ...
- 字符串查找KMP算法
如果你用过ctrl+F这个快捷键,那么你有很大的概率使用过这个算法,这就是在待查找字符串(可能有成千上万个字符)中找出模式串(比较小,可能有几个字符),可能找到大于或者等于1次的位置.例如,在abab ...
- 字符串匹配KMP算法(转自阮一峰)
转自 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 字符串匹配是计算 ...
随机推荐
- Linux系统小问题解决总结
[解决Ubuntu missing launcher and menu bar的问题] 按下ctrl + Alt + T打开终端: 输入以下命令: dconf reset -f /org/compiz ...
- java微信平台,发源码
最近写了一个微信平台的架构,采用servlet + spring3.0 + hibernate4.1.整体架构由我负责建设,我尽可能的把业务模块分出来.趁着刚搭好的框架,留着这版.代码是大部份都由其他 ...
- JDBC连接数据库(MySQL)
package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe ...
- android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an applic
之前遇到过这样的问题, 04-12 10:40:33.302: E/AndroidRuntime(17213): Caused by: android.view.WindowManager$BadTo ...
- android fragment addToBackStack bug
In FragmentActivity.First, I add two fragment by FragmentTransaction. See the flowing code : /****** ...
- Kafka分布式集群搭建
环境说明 kafka自0.9之后增加了connector的特性.本文主要是搭建一个分布式的kafka connector和broker. 本文用了三台机器进行部署,使用centos 6.6. host ...
- Java代码到字节码——第一部分
Java代码到字节码——第一部分 原文地址 作者:James Bloom 译者:张坤 理解在Java虚拟机中Java代码如何别被编译成字节码并执行是非常重要的,因为这可以帮助你理解你的程序在运行时发生 ...
- Java构造器的深入理解
[构造器与方法的深入理解] 构造器的深入理解 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 [博客地址]http://www.cnblogs.com/grl2 ...
- dubbo学习笔记
一.zookeeper在Dubbo中扮演角色 流程:1.服务提供者启动时向/dubbo/com.foo.BarService/providers目录下写入URL2.服务消费者启动时订阅/dubbo/c ...
- js中的document.body.scrollTop与document.documentElement.scrollTop
获取当前页面滚动条纵坐标的位置:document.body.scrollTop与document.documentElement.scrollTop获取当前页面滚动条横坐标的位置:document.b ...