質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1832閲覧

文字列探索:BM法を用いたコードについて

Aki3

総合スコア9

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/06/24 15:40

###前提・実現したいこと
文字列探索について、BM法でコーディング。
〜〜文字目にマッチすると表示させたいです。

###発生している問題・エラーメッセージ
コンパイルはできますが、
アルゴリズムがうまく組めていないようで、
「0文字目にマッチする」という結果になります。

ご教授願いたいです。

###該当のソースコード

Java

1 2//txt:=探索される文字列, pat:=探索したい文字列 3//mainメソッド等は略 4 5 int pt = pat.length()-2; 6 int pp = pat.length()-1; 7 int[] skip = new int[pat.length() + 1]; // スキップテーブル 8 9 // スキップテーブルの作成 10 11 skip[pt] = 0; 12 while (pt >= 0){ 13 if (pat.charAt(pt) == pat.charAt(pp)) 14 skip[pt--] = pp--; 15 else if (pp == pat.length()-1) 16 skip[pt--] = pp; 17 else 18 pp = skip[pp]; 19 } 20 21// 探索 22 int k = -1; 23 pt = pp = pat.length()-1;//patの最後から探していく 24 while(pt < txt.length()){ 25 if(pt - pp == k){ 26 break; 27 } 28 else{ 29 k = pt - pp; 30 } 31 32 while(txt.charAt(pt) == pat.charAt(pp)){ 33 if(pp == 0){ 34 return pt; 35 } 36 pp--; 37 pt--; 38 39 if(k == pt - pp){ 40 break; }else{ 41 k = pt - pp; 42 } 43 } 44 pp -= skip[pp]; 45 } 46 return -1; 47 } 48 49

###補足情報(言語/FW/ツール等のバージョンなど)
Java

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

BM法が何なのか全く分かっていないコードになっているので、もう一度BM法を勉強しなおしたほうがいいです。

投稿2017/06/25 03:04

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問