Set<Character>
のすべての文字のを作成しword
、それを繰り返すことができます。1つの文字がにない場合dictionaryWord
、dictionaryWord
は適合しません。すべてが表示された場合のみ-印刷dictionaryWord
String word = "dog";
String dictionaryWord;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((dictionaryWord = br.readLine()) != null) {
Set<Character> chars = new HashSet<Character>();
for (char c : word.toCharArray()) {
chars.add(c);
}
boolean match = true;
for (Character c : chars) {
String s = "" + c;
if (!dictionaryWord.contains(s)) {
match = false;
break;
}
}
if (match == true)
System.out.println(dictionaryWord);
}
while
上記のコードでは、もちろん、セットの作成をループの外に移動できます。
より効率的な解決策は、Set
fromdictionaryWord
も作成し、2つのセットの共通部分がを表すセットと同一であるかどうかを確認することですword
。
これは次のようになります:
String word = "dog";
Set<Character> set1 = new HashSet();
for (char c : word.toCharArray()) {
set1.add(c);
}
String dictionaryWord;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((dictionaryWord = br.readLine()) != null) {
Set<Character> set2 = new HashSet();
for (char c : dictionaryWord.toCharArray()) {
set2.add(c);
} Set<String> intersection = new HashSet(CollectionUtils.intersection(set1, set2));
if (set1.equals(intersection)) {
System.out.println(dictionaryWord);
} else System.out.println("bad");
}
CollectionUtils.intersection()
ApacheCommonsから使用する