两种模式匹配算法:Brute-Force和KMP
2012-11-18 21:11
555 查看
public class TestString { /** * Brute-Force算法 * 在目标串target中查找与模式串pattern相等的一个子串,并确定该子串的位置 * @param target * @param pattern * @param begin * @return */ public static int indexOf(String target,String pattern,int begin){ if(pattern!=null && pattern.length()>0 && target.length()>=pattern.length()){ int i=begin,j=0; while(i < target.length()){ if(target.charAt(i)==pattern.charAt(j)){ i++; j++; } else{ i = i-j+1; j=0; } if(j==pattern.length()) return i-j; } } return -1; } /** * KMP算法 * 在目标串target中查找与模式串pattern相等的一个子串,并确定该子串的位置 * @param target * @param pattern * @param begin * @return */ public static int indexOf2(String target,String pattern,int begin){ if(target!=null && pattern!=null && pattern.length()>0 && target.length()>=pattern.length()){ int i=begin,j=0; int[] next = getNext(pattern); while(i<target.length()){ if(j==-1 || target.charAt(i)==pattern.charAt(j)){ i++; j++; } else j = next[j]; if(j==pattern.length()) return i-j; } } return -1; } public static int[] getNext(String pattern){ int j=0,k=-1; int[] next = new int[pattern.length()]; next[0] = -1; while(j<pattern.length()-1){ if(k==-1 || pattern.charAt(j)==pattern.charAt(k)){ j++; k++; if(pattern.charAt(j)!=pattern.charAt(k)) next[j] = k; else next[j] = next[k]; } else k = next[k]; } return next; } public static void main(String[] args) { String target = "ababdabcd"; String pattern = "abc"; System.out.println(indexOf(target, pattern, 0)); System.out.println(indexOf2(target, pattern, 0)); } }
相关文章推荐
- 数据结构与算法(Java描述)-12、串的模式匹配算法(Brute-Force与KMP算法)
- 2018_1_28_Blue Jeans_模式匹配_朴素_brute_force算法
- 模式匹配的Brute-Force算法和KMP算法
- 数据结构Java实现——③串--->串的模式匹配:Brute-Force算法和 KMP算法
- 数据结构(java语言描述)模式匹配——Brute-Force(BF)算法
- 串--->串的模式匹配:Brute-Force算法和 KMP算法
- java实现Brute-Force和KMP模式匹配
- 字符串模式匹配之Brute force、KMP、Horspool算法
- Brute-Force模式匹配算法
- 模式匹配的KMP 算法
- KMP模式匹配算法 C++实现
- KMP模式匹配算法以及普通模式匹配算法
- 串的KMP模式匹配算法(C语言优化)
- KMP模式匹配算法(1)
- 串的模式匹配算法——KMP
- 串的模式匹配(基于修正的KMP的匹配算法)
- KMP模式匹配算法
- KMP模式匹配算法
- [转] 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
- 经典算法——KMP模式匹配