Boyer-Moore算法java实现详解编程语言
2023-06-13 09:20:30 时间
suffix(pattern,patLength,suffix);
//模式串中没有子串匹配上好后缀,也找不到一个最大前缀
for(i=0;i patLength;i++)
bmGs[i]=patLength;
//模式串中没有子串匹配上好后缀,但找到一个最大前缀
j=0;
for(i=patLength-1;i i--)
if(suffix[i]==i+1)
for(;j patLength-1-i;j++)
if(bmGs[j]==patLength)
bmGs[j]=patLength-1-i;
//模式串中有子串匹配上好后缀
for(i=0;i patLength-1;i++)
bmGs[patLength-1-suffix[i]]=patLength-1-i;
System.out.print("bmGs:");
for(i=0;i patLength;i++)
System.out.print(bmGs[i]+",");
System.out.println();
private int getBmBc(String c,Map String,Integer bmBc,int m)
//如果在规则中则返回相应的值,否则返回pattern的长度
if(bmBc.containsKey(c))
return bmBc.get(c);
}else
return m;
public void boyerMoore(String pattern,String text )
int m=pattern.length();
int n=text.length();
Map String,Integer bmBc=new HashMap String,Integer
int[] bmGs=new int[m];
//proprocessing
preBmBc(pattern,m,bmBc);
preBmGs(pattern,m,bmGs);
//searching
int j=0;
int i=0;
int count=0;
while(j =n-m)
for(i=m-1;i =0 pattern.charAt(i)==text.charAt(i+j);i--)
{ //用于计数
count++;
if(i 0){
System.out.println("one position is:"+j);
j+=bmGs[0];
}else{
j+=Math.max(bmGs[i],getBmBc(String.valueOf(text.charAt(i+j)),bmBc,m)-m+1+i);
System.out.println("count:"+count);
}
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/11021.html
cjava相关文章
- fileinputstream java_Java FileInputStream close()方法
- 【算法】java 实现数组的反转
- java单例模式_Java单例模式
- java冒泡排序概练_Java的冒泡排序[通俗易懂]
- java 优先级队列_JAVA 队列
- java webservice接口开发教程_JAVA入门教程
- Java 对称加密几种算法分别实现详解编程语言
- java压缩与解压(Java.util.zip)详解编程语言
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法详解编程语言
- 如何用70行Java代码实现深度神经网络算法详解编程语言
- 算法 Java中的String简单模糊相似度算法详解编程语言
- Java递归算法详解编程语言
- Java 实现Huffman 编码算法详解编程语言
- Java实现RC5算法详解编程语言
- java冒泡排序算法详解编程语言
- 约瑟夫环算法Java实现代码详解编程语言
- Java数据结构和算法(十一)——红黑树详解编程语言
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】编程语言
- java 数据结构与算法—队列详解编程语言
- MergeSort(归并排序)算法Java实现详解编程语言
- Java 与 Linux 的结合:开启新时代(java和linux)
- LRU算法的Java实现详解编程语言
- 玩转Linux:Java开发入门指南(linux上开发java)
- 实战探索:Java中使用Redis缓存(java的redis案例)
- 构建Java应用程序中Redis集群的方法(java连redis集群)
- 使用Java程序执行Linux指令:实现自动化操作(java执行linux命令)
- 学习Java编程,攻克Oracle难题(java学oracle)