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一个一个字符匹配,开始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;
}
}