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アルゴリズムはしばしば、作業効率は高くはないが、バックであってもよいです。