「dictionary」と呼ばれる一連の文字列が与えられ、単語の辞書を表すフィールドとして格納されます。
String パラメーター ("phrase") を受け取り、指定されたフレーズ内の文字を並べ替えて作成できる辞書セット内のすべての単語を含むセットを返すメソッドを作成します。基本的に私はアナグラムの辞書を検索しています。
これが私のコードです:
public Set<String> getWords(String phrase) {
Set<String> anagrams = new TreeSet<String>();
String chosen = "";
anagrams.addAll(getWords(phrase, chosen));
return anagrams;
}
public Set<String> getWords(String phrase, String chosen) {
if (phrase == null) {
throw new IllegalArgumentException();
}
Set<String> anagrams = new TreeSet<String>();
if (dictionary.contains(chosen)) {
anagrams.add(chosen);
anagrams.addAll(getWords(phrase, chosen));
} else {
for (int i = 0; i < phrase.length(); i++) {
String ch = phrase.substring(i, i + 1);
String temp = phrase.substring(0, i) + phrase.substring(i + 1);
anagrams.addAll(getWords(temp, chosen + ch));
}
}
return anagrams;
}
したがって、私のアプローチは次のとおりです。 1. 変数「chosen」で表される、このスレッドで渡された可能性について辞書を確認します。
- 辞書にその可能性が含まれている場合は、呼び出しの最後に返される「アナグラム」と呼ばれるセットに追加します。次に、可能性をもう一度渡し、そこから他の組み合わせを作成しようとします。
3.. 辞書にその可能性が含まれていない場合は、文字列を変更して他の可能性を試し、再帰的にテストします。
上記のコードは「スタック オーバーフロー エラー」を生成します。これは、私の調査によると、無限再帰を行っているか、同じ文字列を何度も何度も無限に渡していることを示しています。しかし、どこでこれを行っているのかわかりません。あなたはできる?