BF算法的java实现

BF(Brute Force)算法核心思想是:首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则T向 右移动一个字符的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。该算法最坏情况下要进行 M*(N-M+1)次比较, 时间复杂度为O(M*N)
     比如: String a ="123456789" String b= "23"
   其实就是循环 a一个一个字符匹配,开始a[0]和b[0]匹配,没有找到,直接不用找b[1],直接用a[1]和b[0]匹配发现已经 找到,然后继续用
a[2]和b[1]匹配发现已经 找到。前且是b字符串末尾。说明已经完全找到。返回结果
package com.string;
//BF算法
/*
 * 1.问题:找出str2在str1中出现的起始位置
 * */
public class BF01 {
	public static void main(String args[]){
		String str1 = "ailkmno";
		String str2 = "ilkm";
		int n = find(str1,str2);
		System.out.println(str2+"在"+str1+"中出现的位置是:"+n);
		
	}
	public static int find(String str1,String str2){
		char[] c1 = str1.toCharArray();
		char[] c2 = str2.toCharArray();
 		int i=0;
		int j;
		while(i<str1.length()-1){
			j = 0;
			while(c1[i]==c2[j]&& j< str2.length()-1){
				i++;
				j++;
			}
			if(j==str2.length()-1){
				return i - str2.length()+1;
				
			}
			i=i-j+1;
			
		}
		return -1;
		}
		
		
	}



package com.test;
//BF算法  
/* 
* 1.问题:找出str2在str1中出现的起始位置 
* */  

public class Test2 {
	public static void main(String args[]){  
	      String str1 = "ailkmno";  
	      String str2 = "ilkm";  
	      int n = find(str1,str2);  
	      System.out.println(str2+"在"+str1+"中出现的位置是:"+n);  
	        
	  }  
	  public static int find(String str1,String str2){
		  char[] c1=str1.toCharArray();
		  char[] c2=str2.toCharArray();
		  int j=0;
		  int i=0;
		  for(;i<str1.length();){
			  if(j>=str2.length()-1){
				  break;
			  }
			  if(c1[i]==c2[j] ){
				  i=i+1;
				  j=j+1;
			  }else{
				  i=i+1;
			  }
		  }
		  System.out.println(i+"                 "+j);
		  return i-str2.length()+1;
	  }
}


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值