我一直在试用有关codingbat,map1&的新内容。 2.我已经完成了map1,我在map2的中途,但我只是坚持这个问题。我似乎无法弄清楚如何组合两个字符串。
给定一组非空字符串,返回
Map<String, String>
用一个键可以看到每个不同的第一个字符,其值为 所有以该字符开头的字符串都附加在一起 命令它们出现在数组中。
示例:
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([]) → {}
这是我的代码:
public Map<String, String> firstChar(String[] strings)
{
Map<String, String> map = new HashMap<String, String>();
String x = "";
for ( String s: strings )
{
if ( s.substring(0,1) == s.substring(0,1))
x += s;
map.put(s.substring(0,1), x);
}
return map;
}
我只获得{"d": "d", "b": "", "c": "", "a": ""}
我还试过s.substring(0, 1, map.get(s) + map.get(s))
只返回null
。如果有人能向我解释这一点,我将不胜感激!
谢谢!
答案 0 :(得分:4)
你的逻辑错了,你正在比较字符串的第一个字符和它自己。此外,虽然这里不是您的问题,但您要将字符串与==
而不是equals
进行比较。 ==
用于比较引用,equals
用于比较逻辑相等。另外,要获取字符串的第一个字符,您只需使用s.charAt(0)
即可。具有讽刺意味的是,如果您这样做,就不会遇到此问题,因为String.charAt
会返回char
,这是一种原始类型,因此可以使用==
安全地进行比较。
包含各种改进和修复的代码:
public Map<String, String> firstChar(String[] strings) {
Map<String, String> map = new HashMap<>();
for (String s: strings) {
map.merge(String.valueOf(s.charAt(0), s, String::concat);
}
return map;
}
或Java-8之前:
public Map<String, String> firstChar(String[] strings) {
Map<String, String> map = new HashMap<>();
for (String s: strings) {
String key = String.valueOf(s.charAt(0));
String value = map.get(key);
map.put(key, (value == null ? "" : value) + s);
}
return map;
}
答案 1 :(得分:0)
public Map<String, String> firstChar(String[] strings) {
Map<String, String> map = new HashMap<String, String> ();
for (String s:strings) {
if (!map.containsKey(s.substring(0,1))) { // first time we've seen this string
map.put(s.substring(0,1), s);
}
else
{
String existing = map.get(s.substring(0,1));
map.put(s.substring(0,1), existing+s);
}
}
return map;
}
答案 2 :(得分:0)
public Map<String, String> firstChar(String[] strings) {
Map<String, String> map = new HashMap<String, String>(strings.length);
for (String string : strings) {
String firstCharacter = String.valueOf(string.charAt(0));
map.put(firstCharacter, map.getOrDefault(firstCharacter, "") + string);
}
return map;
}
答案 3 :(得分:0)
public Map<String, String> firstChar(String[] strings) {
Map<String, String> str = new HashMap<String, String>();
for (int i = 0; i < strings.length; i++) {
String value = "";
for (int j = 0; j < strings.length; j++) {
if (strings[i].charAt(0) == strings[j].charAt(0)) {
value = value+strings[j];
}
}
str.put(Character.toString(strings[i].charAt(0)), value);
}
return str;
}