String[] dictionaryArr= new String[]{"mee","go","bat","me","eat","goal","boy","run","go"}; char[] characterArr={'e','o','b','a','m','g','l'};
OR
String[] characterArr= new String[]{"e","o","b","a","m","g","l"};
I want to compare dictionaryArr to characterArr in such a way that it will
output: go, me, goal
Note: it did’nt output “mee” because letter “e” is repeated and there is only one ‘e’ in characterArr also it shouldn’t print “go” twice
Here’s what I have so far:
for (int i = 0; i < dictionaryArr.length ; i++) { for (int j = 0; j < characterArr.length ; j++) { if (dictionaryArr[i] == characterArr[j]) { System.out.println(dictionaryArr[i]); } } }
Advertisement
Answer
You’re printing the word as soon as you find a matching letter. What you need to do is print it only after there are no missing letters. One way to do that is to create a list and check and remove each character as you iterate:
private static boolean matches(String word, String[] characterArr) { List<String> chars = new ArrayList<>(Arrays.asList(characterArr)); for (String c : word.split("")) { if (!chars.remove(c)) { return false; } } return true; }
We can call this in a distinct stream to easily avoid duplicate words:
Arrays.stream(dictionaryArr) .distinct() .filter(word -> matches(word, characterArr)) .forEachOrdered(System.out::println);