串的模式匹配算法——BF算法


 在主串中,從指定的起始位置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)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM