Solved

# wordmultiple challenge

Posted on 2016-09-30
92 Views
Hi,

I am working on below challenge

wordMultiple
Given an array of strings, return a Map<String, Boolean> where each different string is a key and its value is true if that string appears 2 or more times in the array.

wordMultiple(["a", "b", "a", "c", "b"]) → {"b": true, "c": false, "a": true}
wordMultiple(["c", "b", "a"]) → {"b": false, "c": false, "a": false}
wordMultiple(["c", "c", "c", "c"]) → {"c": true}

do i need to care about the output sorting of values like alphabetical ascending or descending etc.

0
Question by:gudii9
• 4
• 4
• 2
• +1

LVL 20

Expert Comment

ID: 41824741
Looking at results, sorting is not the requirement.
{"b": true, "c": false, "a": true}
{"b": false, "c": false, "a": false}
{"c": true}

You will need to iterate thru an array and keep a count of strings. Once counted then you need to check if it is more than two.
0

LVL 37

Expert Comment

ID: 41826348
do i need to care about the output sorting of values like alphabetical ascending or descending etc.
Does the challenge asks for that? No.
It asks for return a Map. And by nature a Map simply has no key sorting. (a SortedMap has)
0

LVL 7

Author Comment

ID: 41826614

http://codingbat.com/prob/p190862

It asks for return a Map. And by nature a Map simply has no key sorting. (a SortedMap has)
only Map not SorterMap here.
0

LVL 32

Assisted Solution

phoffric earned 250 total points
ID: 41826771
If you click on the MAP link in the challenge question, you see that you are actually returning a hashmap which is not sorted.
As you know, hashing usually removes any sorted order.

Even the examples you show in the OP show no ordering.
0

LVL 7

Author Comment

ID: 41826926
``````public Map < String, Boolean > wordMultiple(String[] strings) {
Map < String, Boolean > boolMap = new HashMap();
Map < String, Integer > intMap = new HashMap();

for (int i = 0; i < strings.length; i++) {
String buffer = strings[i];

if (intMap.containsKey(buffer)) {
int val = intMap.get(buffer);
val++;
intMap.put(buffer, val);
} else {
intMap.put(buffer, 1);
}
boolMap.put(buffer, intMap.get(buffer) >= 2);

}

return boolMap;
}
``````

above passes all. any improvements or alternate aproaches?
0

LVL 32

Expert Comment

ID: 41827402
Here's a tiny improvement, IMO:
``````    for (String buffer:strings) {
//        String buffer = strings[i];
``````
Nice indenting, BTW.
0

LVL 37

Accepted Solution

zzynx earned 250 total points
ID: 41827513
If you would like to use

`````` for (String buffer:strings) {
``````

that's a replacement for these TWO lines of code:

``````for (int i = 0; i < strings.length; i++) {
String buffer = strings[i];
``````

Another imrpovement:
1) no need for intermediate variables
2) once you've counted two instances, there's no need to further "manipulating" your maps. Since it won't change the outcome.

``````public Map<String, Boolean> wordMultiple(String[] strings) {
Map < String, Boolean > boolMap = new HashMap();
Map < String, Integer > intMap = new HashMap();

for (String buffer:strings) {
if (boolMap.containsKey(buffer) && boolMap.get(buffer)) {
continue;
}
if (intMap.containsKey(buffer)) {
intMap.put(buffer, intMap.get(buffer)+1);
} else {
intMap.put(buffer, 1);
}
boolMap.put(buffer, intMap.get(buffer) >= 2);
}
return boolMap;
}
``````
0

LVL 32

Expert Comment

ID: 41827531
@zzynx,
In the first half of  your last post #a41827513 you say, "that's a replacement for these TWO lines of code:"

But I demonstrated that in the post before you. Why did you repeat this small point?
0

LVL 37

Expert Comment

ID: 41829420
@phoffric
You told that
``````for (String buffer:strings) {
``````
is a replacement for
``````//        String buffer = strings[i];
``````
Which is in correct.

I corrected that. That's why I wrote TWO with capitals.
0

LVL 32

Expert Comment

ID: 41829962
Ok. No replacement since a for loop can hardly replace a definition of a variable. Just replacing one for loop with another and then commenting out the duplicate definition of buffer.
0

LVL 37

Expert Comment

ID: 41830023
Just replacing one for loop with another
That wasn't clear to me.

It's always good to use the form
replace
``````this code
``````
by
``````that code
``````
0

## Featured Post

Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…