java bm_BM实现字符串匹配问题,java

昨天在博客园看到一道关于字符串匹配的题,用BM算法实现了一下,有不足之处望大家多提意见!题目是这样的,找出一个字符串中某子串出现的次数,直接上代码:

import java.util.Scanner;

public class BM_Test {

public static void main(String args[]){

Scanner s=new Scanner(System.in);

System.out.println("请输入文本串");

String str1=s.next();

System.out.println("请输入要查找的字符串");

String str2=s.next();

int length=str2.length();

int[] matchJump=new int[length];

char[] p=str2.toCharArray();

int count=0;

computeMatchJumps(p,length,matchJump);

int start1=0;

int start2=0;

for(int i=start1;i

int num=i;

for(int j=0;j

if(str1.substring(num,num+1).equals(str2.substring(j,j+1))){

num++;

if(j==str2.length()-1){

start1+=str2.length();

count++;

continue;

}

else

continue;

}

if(!str1.substring(num,num+1).equals(str2.substring(j,j+1))){

start1+=matchJump[j];

break;

}

}

}

System.out.println(count);

}

public static void computeMatchJumps(char[] p,int m,int[] matchJump){

int low;

int shift;

int[] sufx = new int[m+1];

for(int k=0;k

matchJump[k]=m+1;

}

sufx[m]=m+1;

for(int k=m-1;k>=0;k--){

int s=sufx[k+1];

while(s<=m){

if(p[k]==p[s-1]){

break;

}

matchJump[s-1] = min(matchJump[s-1],s-k-1);

s=sufx[s];

}

sufx[k]=s-1;

}

low=1;

shift=sufx[0];

while(shift<=m){

for(int k=low;k<=shift;k++){

matchJump[k-1]=min(matchJump[k-1],shift);

}

low=shift+1;

shift=sufx[shift];

}

for(int k=0;k

matchJump[k]+=m-k;

}

}

private static int min(int i, int j) {

// TODO Auto-generated method stub

int minNum=i

return minNum;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值