文字列パターンマッチングアルゴリズム(A):BFアルゴリズム

BFアルゴリズムの最初に、基本的な考え方

  BF(ブルートフォース)のアルゴリズムは、最も単純で直感的なアルゴリズムをパターンマッチングです。アルゴリズムの基本的な考え方は同じならば、後続の文字を一つずつ比較し、最初の文字の主人公とパターンP(検索するサブストリング)の開始から最初の配列を比較することである;それは比較の中に発見された場合にはに等しくありません場合は、次にバック最初の文字位置の一次配列に1 +開始、及び文字パターンPを再度比較します

第二に、アルゴリズムコード

1  パッケージアルゴリズム;
 2  
3。 インポートjava.util.Scanner;
 4。 
5。 / ** 
6。 *文字列照合アルゴリズム:BF
 7。  * / 
8。 パブリック クラスBF {
 9。     // メインストリング
10      プライベートストリングS1;
 11。     // 対象文字列
12      プライベートストリングS2;
 13である 
14      / ** 
15       *メインコンソール入力文字列、対象文字列
 16       {用い* @link スペースを含む現在の行(非末端)の残りの部分を受信することができるスキャナnextLine}位、および。
17       *スキャナであって、前記方法を使用することは勿論です。
18       * / 
19     公共 のボイド読む(){
 20です         // 入力メインの文字列
21で          のSystem.out.println(「メインの文字列を入力してください:」);
 22は、          スキャナのスキャン= 新しい新しいスキャナ(System.in);
 23は、         // 入力文字を与えるために一致する
24に          システムを.out.println( "宛先の文字列を入力します" );
 25          スキャナAIM = 新しい新しいスキャナ(System.in);
 26で         IF (scan.hasNext()){
 27              S1 = scan.nextLine();
 28              のSystem.out。 println( "入力としてメインストリング:" + S1);
 29          }
 30          IF (aim.hasNext()){
31は、              S2 = aim.nextLine();
 32              のSystem.out.println( "ターゲット文字列を入力する:" + S2)を、
 33である         }
 34は、 
35          IF(s1.length()< s2.length()){
 36              システム。 out.printlnを( "ランレングスが主ターゲット文字列よりも大きくなければならない、再入力してください!" );
 37              読む();
 38である         }
 39  
40          // 閉じる
41である         )(scan.close;
 42である         (aim.close);
 43である     }
 44である 
45      / ** 
46       *文字列照合アルゴリズムBFは、算術平均時間計算量はO((NM)M)であり、 nは、Mがターゲット文字列の長さ主にラン長さです。
47       *
 48      * @param メインストリングの開始位置から整合開始
 49       *の@return 、真の一致に成功しそうでなければ失敗する
 50       * / 
51である     パブリック ブール BF(INT 開始){
 52は          リード(); // 入力メインストリング、ターゲット文字列パラメータ
53は、         INT I、J、
 54である         ため(I =スタート; Iはs1.length()< - s2.length()){
 55の             ための(; J <s2.length(); J = 0 J ++ ){
 56は、                 IF(S1。 !のcharAt(I)= s2.charAt(J))は、{
 57がある                      ++ I ;
 58                      BREAK ;   //再起動下部主文字列から見た文字、戻ったばかりの
59                  } {
 60                      私は++;     // 成功した試合は、二つの文字列の次の文字の比較を開始する
61                  }
 62                  // マッチング後のターゲット文字列を、マッチングが成功すると戻ります結果
63である                 IF - (1 s2.length J ==(){)
 64                      リターン trueに;
 65                  }
 66              }
 67          }
 68          リターン falseに;
 69      }
 70  
71れています }

  BFアルゴリズムOの平均時間計算((NM)M)、nは主にランレングスは、mはターゲット文字列の長さです。BFアルゴリズムはしばしば、作業効率は高くはないが、バックであってもよいです。

おすすめ

転載: www.cnblogs.com/magic-sea/p/11802524.html