firstChar challenge

Hi,

I am working on below challenge.

http://codingbat.com/prob/p168493

Given an array of non-empty strings, return a Map<String, String> with a key for every different first character seen, with the value of all the strings starting with that character appended together in the order they appear in the array.

firstChar(["salt", "tea", "soda", "toast"]) → {"t": "teatoast", "s": "saltsoda"}
firstChar(["aa", "bb", "cc", "aAA", "cCC", "d"]) → {"d": "d", "b": "bb", "c": "cccCC", "a": "aaaAA"}
firstChar([]) → {}

i was not clear on above description. please advise
LVL 7
gudii9Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
phoffricConnect With a Mentor Commented:
And, of course, as already explained in other questions, you can change the for-loop so that you do not need the counter, i.
0
 
tel2Commented:
Hi gudii9,

> "i was not clear on above description. please advise"

Unless you tell us which parts of the description you are not clear on, it's a bit hard for us to know how to advise you.  Do you expect us to rewrite the entire description and hope that you understand our version?

So, instead of making this a guessing game for us, please be specific.  We're expert programmers, not expert mind readers.

Thanks.
tel2
1
 
gudii9Author Commented:

Given an array of non-empty strings, return a Map<String, String> with a key for every different first character seen, with the value of all the strings starting with that character appended together in the order they appear in the array.

firstChar(["salt", "tea", "soda", "toast"]) → {"t": "teatoast", "s": "saltsoda"}

why only character key s taken but not a/l/t in the salt??
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
phoffricCommented:
>> why only character key s taken but not a/l/t in the salt??

No particular reason. These challenges are sometimes testing your algorithm skills. In this case, the question is just testing your MAP and string skills. The question variants could have said take the first two chars for the key unless the third char (if it exists) is 'z', in which case "z" is the string key.

These questions are just exercises to make you stronger. But they may not have any value in professional programming on the job. (But making you stronger is, of course, very valuable - I am not saying that you should stop working these challenges.)
0
 
gudii9Author Commented:
every different first

i missed first in description
0
 
gudii9Author Commented:
let me think
0
 
gudii9Author Commented:
public Map < String, String > firstChar(String[] strings) {

    Map < String, String > map = new HashMap < String, String > ();

    for (int i = 0; i < strings.length; i++) {

        String k = String.valueOf(strings[i].charAt(0));

        if (map.containsKey(k)) {
            String val = map.get(k) + strings[i];
            map.put(k, val);
        } else {
            map.put(k, strings[i]);
        }

    }
    return map;
}

Open in new window


i pass all tests. any improvements or alternate approaches?
0
 
phoffricCommented:
Looks good. Maybe save a few keystrokes:
Map < String, String > map = new HashMap();
0
 
gudii9Author Commented:
public Map<String, String> firstChar(String[] strings) {
   
  Map<String, String> map = new HashMap();
   
 // for (int i = 0; i < strings.length; i++) {
 for(String str:strings)
     
    String k = String.valueOf(str.charAt(0));
     
    if (map.containsKey(k)) {
      String val = map.get(k) + strings[i];
      map.put(k, val);
    } else {
      map.put(k, strings[i]);
    }
     
  }
  return map;
}

Open in new window


above gives below error
Compile problems:


Error:      String k = String.valueOf(str.charAt(0));
      ^^^^^^
Syntax error, insert "AssignmentOperator ArrayInitializer" to complete ArrayInitializerAssignement


see Example Code to help with compile problems

please advise
0
 
gudii9Author Commented:
public Map<String, String> firstChar(String[] strings) {
   
  Map<String, String> map = new HashMap();
   
 // for (int i = 0; i < strings.length; i++) {
 for(String str:strings){
     
    String k = String.valueOf(str.charAt(0));
     
    if (map.containsKey(k)) {
      String val = map.get(k) + str;
      map.put(k, val);
    } else {
      map.put(k, str);
    }
     
  }
  return map;
}

Open in new window



i corrected it. missed { and also used strings[i] at one place

Open in new window

0
 
phoffricCommented:
>> i corrected it.
Excellent!
0
 
phoffricCommented:
I am not against temporary variables, which good compilers will optimize away. And, when debugging a problem, temp variables are very helpful. But some projects hate them. So, if you see something like this, it is due to their hatred.
      // String val = map.get(k) + str;
      map.put(k, map.get(k) + str);

Open in new window

0
 
gudii9Author Commented:
i see your point
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.