【字符串】模式匹配:BF / KMP
来源:互联网 发布:网络直播扰民 如何取证 编辑:程序博客网 时间:2024/05/21 21:37
字符串的模式匹配代码
public class KMP {/** * BF:穷举暴力 * @param s 文本串 * @param t 模式串 * @return 模式串在文本串中的位置 */public static int BF(String s,String t) {int i = 0,j = 0;char[] ss = s.toCharArray();char[] tt = t.toCharArray();while(i < ss.length && j < tt.length) {if(ss[i] == tt[j]) {i++;j++;}else {i = i - j + 1;j = 0;}}if(j >= t.length())return i - tt.length;elsereturn -1;}/** * KMP算法 * @param s 文本串 * @param t 模式串 * @return 模式串在文本串中的位置 */public static int KMPIndex(String s,String t) {int[] next = getNext(t);int i = 0,j = 0;char[] ss = s.toCharArray();char[] tt = t.toCharArray();while(i < ss.length && j < tt.length) {if(j == -1 || ss[i] == tt[j]) {i++;j++;}else {j = next[j];}}if(j >= tt.length)return i - tt.length;else return -1;}/** * 计算模式串的next数组 * @param t 模式串 * @return 模式串的next数组 */public static int[] getNext(String t) {int[] next = new int[t.length()];int j = 0,k = -1;next[0] = -1;char[] tt = t.toCharArray();while(j < tt.length - 1) {if(k == -1 || tt[j] == tt[k]) {j++;k++;next[j] = k;}elsek = next[k];}return next;}/** * 优化 * @param t * @return */public static int[] getNext2(String t) {int[] next = new int[t.length()];int j = 0,k = -1;next[0] = -1;char[] tt = t.toCharArray();while(j < tt.length - 1) {if(k == -1 || tt[j] == tt[k]) {j++;k++;if(tt[j] == tt[k])next[j] = next[k];elsenext[j] = k;}elsek = next[k];}return next;}public static void main(String[] args) {System.out.println(BF("aababcd", "abc"));System.out.println(KMPIndex("aababcd", "abc"));}}
0 0
- 【字符串】模式匹配:BF / KMP
- 字符串模式匹配算法--BF & KMP算法
- 字符串模式匹配之一-------BF & KMP
- 字符串的模式匹配(BF、KMP)
- 字符串匹配(BF,KMP,BM)
- 字符串匹配-KMP、BF算法
- 字符串模式匹配的BF算法与KMP算法
- 字符串模式匹配(BF算法和KMP算法)
- 查表:字符串模式匹配(BF、KMP算法)
- 算法:字符串匹配、BF/KMP/近似匹配
- 字符串匹配算法——KMP && BF
- 字符串匹配算法之BF vs KMP
- 字符串匹配算法--BF、KMP、Sunday
- 【算法分析】字符串匹配:BF、KMP算法
- 字符串匹配算法(BF和KMP)
- 字符串匹配BF算法和KMP算法
- KMP与BF模式匹配算法
- 模式匹配算法BF和KMP
- 【ShawnZhang】带你看数据结构——第四课:线性表链式结构(循环链表)
- 关于调试器gdb的简单实用方法
- Ant编译问题二:能够成功生成local..properties ,但是custom_rules 里边的任务没有执行
- 插入排序——希尔排序
- 【DP】 HDU 4427 Math Magic
- 【字符串】模式匹配:BF / KMP
- activiti报错ProcessEngines.getDefaultProcessEngine()为null
- Android开发调试中遇到的Waiting for HOME解决方案
- 界面切换动画
- C语言windows目录操作
- 类声明和成员函数定义的分离
- {Effective Java} Chap 8 General Programming
- Android之UI更新--Handler
- deque双端队列的基本操作