1 つのアプローチは (配列でなければならない場合)、入力された文字に基づいて可能な名前のサブセットを構築し、各文字が入力された後に、完全なセットではなくサブセットを比較することです。
たとえば、あなたが
Bill, Bob, Conroy, Fran, Riley, Shelley
2 (A、B、C) を入力すると、
Bill, Bob, Conroy, (Fran if contains)
次に、6 (M,N,O) を入力すると、
Bob, Conroy, (Fran if contains)
これ
を行うには、現在一致しているインデックスのコレクションが必要です。おそらくリストが最適な実装です。
List<Integer> indicesMatched;
含まれている場合
、一致した文字列のインデックスと、最初に一致した文字が文字列内にある場所のインデックスを、おそらくマップとして保存する必要があります (または List と Point クラスの誤用)。
Map<Integer, Integer> matched; // where the key is the array index and the value is the string index
次に、一致したインデックスの最初のセットをこれに入力できます。次に、2番目の数字/文字を比較するときに、リストに保存されているインデックスのみを使用し、それぞれについて2番目の文字と一致しないインデックスを削除します
擬似コード: (で始まる)
// First key press
// For each entry in your array
// If a match
// Add to matched index List
// Second Key Press -- Repeat this step for each subsequent key press
// For each index in list
// Get the entry at that index
// If not a match in second letter
// Remove the index from list
擬似コード: (コンティアン用)
// First key press
// For each entry in your array
// If a match
// Add to matched index map
// Second Key Press -- Repeat this step for each subsequent key press
// For each index in map
// Get the entry at that index
// If not a match in second letter (based on the stored string index)
// Remove the index from map