Solved

# wordcount challenge

Posted on 2016-09-30
Medium Priority
200 Views
Hi,

I am working on below challenge.
http://codingbat.com/prob/p117630

The classic word-count algorithm: given an array of strings, return a Map<String, Integer> with a key for each different string, with the value the number of times that string appears in the array.

wordCount(["a", "b", "a", "c", "b"]) → {"b": 2, "c": 1, "a": 2}
wordCount(["c", "b", "a"]) → {"b": 1, "c": 1, "a": 1}
wordCount(["c", "c", "c", "c"]) → {"c": 4}

do i need to worry about sorting like alphabetica in output?
0
Question by:gudii9
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 21

Accepted Solution

Amitkumar Panchal earned 1000 total points
ID: 41824748
Similar question as mentioned https://www.experts-exchange.com/questions/28973619/wordmultiple-challenge.html?cid=1752.

Answer is the same. :) Example results are not ordered, so need not to worry about.
0

LVL 37

Assisted Solution

zzynx earned 1000 total points
ID: 41826278
>> do i need to worry about sorting like alphabetica in output?
The challenge doesn't mention that, so: No.
Moreover, the're talking about returning a Map.
A Map hasn't any sorting of its keys.
0

LVL 7

Author Comment

ID: 41826807
``````public Map<String, Integer> wordCount(String[] strings) {
Map<String, Integer> map=new HashMap();
for(int i=0;i<strings.length;i++){
String test=strings[i];
if(map.containsKey(test)){
int count=map.get(test);
map.put(test,count+1);
}

else{
map.put(test,1);
}
}
return map;
}
``````

above passes all tests. any improvements or alternate approaches.
0

LVL 7

Author Comment

ID: 41826810
``````public Map < String, Integer > wordCount(String[] strings) {
Map < String, Integer > map = new SortedMap();
for (int i = 0; i < strings.length; i++) {
String test = strings[i];
if (map.containsKey(test)) {
int count = map.get(test);
map.put(test, count + 1);
} else {
map.put(test, 1);
}
}
return map;
}
``````

why above gives below compilation error?
Compile problems:

Error:      Map<String, Integer> map=new SortedMap();
^^^^^^^^^
Cannot instantiate the type SortedMap

see Example Code to help with compile problems
does not codingbat supports SortedMap?
0

LVL 32

Expert Comment

ID: 41826916
Working with SortedMap in this question is off-topic as the challenge questions requires you to use a Map.
You should look up the SortedMap API if you want to ask another question.
0

LVL 7

Author Comment

ID: 41826991
SortedMap is implementation of Map interface similar to HashMap right? I thought codingbat supports that as well but looks no. Only HashMap? I will test in ecipse and see how it works
0

LVL 7

Author Comment

ID: 41828698
looks like no SortedMap class is there. It seems to be interface. TreeMap is only implenetation class.
https://www.tutorialspoint.com/java/java_sortedmap_interface.htm
0

LVL 7

Author Comment

ID: 41828707
``````package test;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class WordCount {

public static void main(String[] args) {
// TODO Auto-generated method stub
// wordCount(["a", "b", "a", "c", "b"]) → {"b": 2, "c": 1, "a": 2}
// Map<String, String> map = new HashMap();
// map.put("b", null);
// map.put("a", "Hi");
String[] arr = { "a", "b", "a", "c", "b" };
System.out.println("--->" + mapAB(arr));

}

/*
* private static String mapAB(String[] arr) { // TODO Auto-generated method
* stub return null; }
*/

public Map<String, Integer> wordCount(String[] strings) {
Map<String, Integer> map = new TreeMap();
for (int i = 0; i < strings.length; i++) {
String test = strings[i];
if (map.containsKey(test)) {
int count = map.get(test);
map.put(test, count + 1);
}

else {
map.put(test, 1);
}
}
return map;
}

}
``````

above gives below error at line at line 9

The method mapAB(String[]) is undefined for the type WordCount

Not sure why and how to fix it?
0

LVL 7

Author Comment

ID: 41828719
``````package test;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class WordCount {

public static void main(String[] args) {
// TODO Auto-generated method stub
// wordCount(["a", "b", "a", "c", "b"]) → {"b": 2, "c": 1, "a": 2}
// Map<String, String> map = new HashMap();
// map.put("b", null);
// map.put("a", "Hi");
String[] arr = { "a", "b", "a", "c", "b" };
System.out.println("--->" + wordCount(arr));

}

/*
* private static String mapAB(String[] arr) { // TODO Auto-generated method
* stub return null; }
*/

public static Map<String, Integer> wordCount(String[] strings) {
Map<String, Integer> map = new TreeMap();
for (int i = 0; i < strings.length; i++) {
String test = strings[i];
if (map.containsKey(test)) {
int count = map.get(test);
map.put(test, count + 1);
}

else {
map.put(test, 1);
}
}
return map;
}

}
``````

i fixed it. now i see sorted key output

--->{a=2, b=2, c=1}
0

LVL 7

Author Comment

ID: 41828722
``````package test;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class WordCount {

public static void main(String[] args) {
// TODO Auto-generated method stub
// wordCount(["a", "b", "a", "c", "b"]) → {"b": 2, "c": 1, "a": 2}
// Map<String, String> map = new HashMap();
// map.put("b", null);
// map.put("a", "Hi");
String[] arr = { "a","e","b", "a", "c", "b" };
System.out.println("--->" + wordCount(arr));

}

/*
* private static String mapAB(String[] arr) { // TODO Auto-generated method
* stub return null; }
*/

public static Map<String, Integer> wordCount(String[] strings) {
Map<String, Integer> map = new HashMap();
for (int i = 0; i < strings.length; i++) {
String test = strings[i];
if (map.containsKey(test)) {
int count = map.get(test);
map.put(test, count + 1);
}

else {
map.put(test, 1);
}
}
return map;
}

}
``````

even after changing TreeMap to HashMap back again why and how it is sorting?

--->{a=2, b=2, c=1, e=1}
0

LVL 7

Author Comment

ID: 41828740
``````public Map<String, Integer> wordCount(String[] strings) {
Map<String, Integer> map=new TreeMap();
for(int i=0;i<strings.length;i++){
String test=strings[i];
if(map.containsKey(test)){
int count=map.get(test);
map.put(test,count+1);
}

else{
map.put(test,1);
}
}
return map;
}
``````

codingbat supported TreeMap as well
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This is about my first experience with programming Arduino.
What do responsible coders do? They don't take detrimental shortcuts. They do take reasonable security precautions, create important automation, implement sufficient logging, fix things they break, and care about users.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
###### Suggested Courses
Course of the Month11 days, 18 hours left to enroll