在主串中,從指定的起始位置pos開始,用i和j分別指示主串S和模式T中正待比較的字符位置,i的初值為pos,j的初值為1。
i與j所指示的字符比較,若相等,則i與j指示的位置同時后移,比較下一對字符。若不等,從主串的下一個字符(i=i-j+2)開始重新和模式T的第一個字符(j=1)比較。
若j大於模式T的長度,則說明匹配成功,返回 和模式T的第一個字符相等的字符 在主串S中的序號(i-T.length)。否則匹配失敗。
1 public class BF { 2 public static void main(String[] args) { 3 String S="ababcabcacbab"; 4 String T="abcac"; 5 char[] charS=S.toCharArray(); 6 char[] charT=T.toCharArray(); 7 int pos=1; 8 run(charS,charT,pos); 9 } 10 public static void run(char[] charS,char[] charT,int pos) { 11 int i=pos; 12 int j=1; 13 while(i<=charS.length && j<=charT.length) 14 { 15 if(charS[i-1] == charT[j-1]) 16 { 17 ++i; 18 ++j; 19 }else 20 { 21 i=i-j+2; 22 j=1; 23 } 24 } 25 if(j>charT.length) 26 { 27 System.out.println("匹配成功,序號為"+(i-charT.length)); 28 }else 29 { 30 System.out.println("匹配失敗"); 31 } 32 } 33 }
BF算法在最壞的條件下時間復雜度為O(m×n)。