[算法]字符串匹配算法KMP(java)
2017-01-16 10:56
387 查看
参考http://www.tuicool.com/articles/e2Qbyyf
public class KMP { public static void cal_next(String str,int[] next,int len){ int i, j; next[0] = -1; for( i = 1; i < len; i++ ) { j = next[ i - 1 ]; while( str.charAt(j+1) != str.charAt(i)&& ( j >= 0 ) ) { j = next[ j ]; } if( str.charAt(i) == str.charAt(j+1) ) { next[ i ] = j + 1; } else { next[ i ] = -1; } } } public static int KMP(String str, int slen, String ptr, int plen, int[] next ){ int s_i = 0, p_i = 0; while( s_i < slen && p_i < plen ) { if( str.charAt(s_i) == ptr.charAt(p_i)) { s_i++; p_i++; } else { if( p_i == 0 ) { s_i++; } else { p_i = next[ p_i - 1 ] + 1; } } } return ( p_i == plen ) ? ( s_i - plen ) : -1; } public static void main(String[] args) { final int n=100; String str,ptr; int slen, plen; int next[]=new int ; Scanner in = new Scanner(System.in); while((str=in.nextLine())!=null && (ptr=in.nextLine())!=null){ slen=str.length(); plen=ptr.length(); cal_next(ptr, next, plen); System.out.println(KMP(str, slen, ptr, plen, next)); } } }
相关文章推荐
- Java实现算法导论中KMP字符串匹配算法
- 算法 字符串匹配算法(朴素模式及KMP模式) java实现
- 【小算法】KMP字符串匹配算法实现
- Java实现 字符串匹配 KMP 算法
- KMP字符串匹配算法Java实现
- 【算法题】字符串匹配算法KMP
- java实现字符串的一般和KMP模式匹配算法
- C++版字符串匹配算法之传统匹配算法加KMP字符串匹配算法
- Java KMP匹配算法的实现
- 经典算法教程:KMP字符串匹配算法
- KMP模式匹配算法原理分析、next数组优化及java实现
- 朴素和KMP模式匹配算法(Java)
- 【数据结构&&等差数列】KMP简介和算法的实现(c++ && java)
- 查找算法(1)、经典算法(6):KMP字符串匹配算法
- 算法-KMP-leetcode-java
- KMP 算法 java实现
- KMP,父串匹配子串算法,java实现
- KMP 算法 —— 字符串匹配算法
- Java实现算法导论中有限自动机字符串匹配算法
- java实现算法之KMP匹配算法(三个关键点掌握即可理解)