私は現在、アナグラムソルバーに取り組んでいます。比較する前に、ユーザー入力と辞書リストの両方の文字をアルファベット順に並べ替えるという 1 つの推奨事項が記載された、非常に優れた投稿を見ました。面白そうだったので挑戦してみます。以前は順列を使用していましたが、複数の単語のアナグラムを解決するために最終的に (そして効率的に) 使用できるものが必要です。
ユーザー入力と辞書の両方を char 配列に入れ、アルファベット順に並べ替えることができます。次に、それぞれを比較して、何かがアナグラムかどうかを判断できるようにする必要があります。アルファベット順のユーザー入力を取得し、アルファベット順の辞書に含まれているかどうかを判断することを考えました。以下にコードを掲載しました。ご想像のとおり、私はこのプロセスのロジックについて少し混乱しています。誰かが私がロジックを少し整理するのを手伝ってくれるかどうか疑問に思っていました. 助けてくれてありがとう。
public class AnagramSolver1 {
public static void main(String[] args) throws IOException {
List<String> dictionary = new ArrayList<String>();
List<String> inputList = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader("src/dictionary.txt"));
String line = null;
Scanner scan = new Scanner(System.in);
while (null!=(line=in.readLine())){
dictionary.add(line);
}
in.close();
char[] sortDictionary;
char[] inputSort;
System.out.println("Enter Word: ");
String input = scan.next();
inputList.add(input);
//Getting a little confused here. I thought about sorting my input
//then iterating through my dictionary (while sorting it too) and comparing
//thus far it produces nothing
for(int i = 0; i < inputList.size(); i++){
inputSort = inputList.get(i).toCharArray();
Arrays.sort(inputSort);
for (int j = 0; j < dictionary.size(); j++) {
sortDictionary = dictionary.get(i).toCharArray();
Arrays.sort(sortDictionary);
if(inputSort.equals(sortDictionary)){
System.out.println("Anagram" +dictionary.get(i));
} //end if
}//end for
}//end for
}//end main
}