2016-04-16 15 views
2

私は、バイナリ検索アルゴリズムを実装して、プレフィックス引数を含む単語を検索しています。これは私が現時点で持っているものですが、出力が正しくありません。ArrayListのバイナリ検索を使用して、特定のプレフィックスを持つ単語を検索する

public static int myBinarySearch2(List<String> arrayList, String prefix) { 
    int first = 0; 
    int last = arrayList.size() - 1; 
    int mid = 0; 

    while (first <= last) { 
     mid = (first + last)/2; 
     int c = prefix.compareTo(arrayList.get(mid)); 
     if (c > 0) { 
      first = mid + 1; 
     } else if (c == 0) { 
      return mid; 
     } else 
      last = mid - 1; 
    } 
    return mid; 
} 

誰かが私のコードを見てフィードバックをくれれば、私はそれを感謝します。ありがとう!

+0

'return mid:'を '-1 return'に変更します。 – saka1029

答えて

3

あなたはboolean startsWith(String prefix)代わりのint compareTo(String s)を使用する必要があります。 http://www.tutorialspoint.com/java/java_string_compareto.htm

あなたは方法を.contains使用することをお勧めします。

最後の文字列は、charcharと完全に一致しています。期待しているとおりではありません。

String s = arrayList.get(mid); 
int c = s.startsWith(prefix) ? 0 : prefix.compareTo(s); 
+0

booleanからどのようにintを取得しますか? – saka1029

+0

@ saka1029、更新しました – Andrew

1

まずArrayListのバイナリ検索を使用してソートする必要があり、そうでない場合はそのリターンが未定義であることを覚えておいてください。私はあなたの問題だと思う。

関連する問題