KMP算法,字符串搜索
来源:互联网 发布:js流程图插件 编辑:程序博客网 时间:2024/05/20 06:51
相比于暴力方法,KMP算法进行字符串搜索时可以根据子串自己的特性,以确定当前是否匹配成功。简单来讲,就是使用了子串的每个字符的集合作为一个状态,创建一个有限状态机(DFA)。
比如要查找的子串为 ABABAC,那么对于每个位置的状态只有三个,即A、B、C,所以可以建立如下表格:
用
package kmp;import java.util.Scanner;public class KMP { private String pat; private int[][] dfa; public KMP(String pat) { this.pat = pat; int M = pat.length(); int R = 256; dfa = new int[R][M]; dfa[pat.charAt(0)][0] = 1; for (int X = 0, j = 1; j < M; ++j) { for(int c = 0; c < R; ++c){ dfa[c][j] = dfa[c][X]; } dfa[pat.charAt(j)][j] = j + 1; X = dfa[pat.charAt(j)][X]; } } public int search(String txt){ int i, j, N = txt.length(), M = pat.length(); for(i = 0, j = 0; i < N && j < M; ++i){ j = dfa[txt.charAt(i)][j]; } if(j == M) return i - M; else return N; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String txt = scanner.nextLine(); String pat = scanner.nextLine(); scanner.close(); KMP kmp = new KMP(pat); System.out.print("text: "); System.out.println(txt); int offset = kmp.search(txt); System.out.print("pattern: "); for(int i = 0; i < offset; ++i) System.out.print(" "); System.out.println(pat); }}
1 0
- KMP算法,字符串搜索
- 快速字符串搜索算法KMP
- KMP 字符串搜索算法的c++实现
- 字符串搜索之KMP算法(伪代码)
- 字符串搜索算法kmp与Boyer-Moore,java实现
- KMP搜索算法
- KMP 字符串匹配算法
- 字符串 KMP 算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串hash kmp算法
- 字符串匹配 KMP 算法
- 学习Netty in action 第二章心得
- Linux文件系统常用命令
- Android 异常退出的生命周期分析
- Android实战简易教程-第七十四枪(Intent之间传递图片)
- merge同步更新数据
- KMP算法,字符串搜索
- Oracle-BPM(八)
- sprintf
- myeclipse自动生成实体类
- btrfs 使用方法
- 【机器学习】主成分分析PCA
- jeecg 主-附表生成代码例子
- @media是什么?css3 @media媒体查询器用法
- listview中使用checkbox滑动或者加载更多数据错乱问题解决方案