在CodeSignal中执行commonCharacterCount。当然,我想看看有多少字符是相同的。
下面是一个例子:
对于s1 = "aabcc"和s2 = "adcaa",输出应为commonCharacterCount(s1, s2) = 3。
字符串有3个常见字符-2个"a"s和1个"c“。
考虑构建一个包含每个元素的字符计数的映射。然后我想检查映射中的每个值,并同时检查这两个值。对于答案,我将在两个Map中添加字符的最小计数。例如,s1 = "aabcc" && s2 = "adcaa",mapS1['a'] = 2 && mapS2['a'] = 3,因此count += min(2,3) =2
这是我的想法,但正如我提到的那样,在迭代两个Map时遇到了一些问题。
第一次使用贴图的值作为计数值。我真的不知道这是否是在map中增加一个值的最佳方法,所以我想我也需要帮助。
提前感谢您:)
static int res(String s1, String s2) {
HashMap<Character, Integer> mapS1 = new HashMap<>();
HashMap<Character, Integer> mapS2 = new HashMap<>();
int count = 0;
for(int i = 0; i < s1.length(); i++)
mapS1.put(s1.charAt(i), mapS1.getOrDefault(s2.charAt(i), 0) + 1);
for(int i = 0; i < s2.length(); i++)
mapS1.put(s2.charAt(i), mapS2.getOrDefault(s2.charAt(i), 0) + 1);
for(Map.Entry<Character, Integer> entry : mapS1.entrySet()) {
int a = mapS1.get(entry.getKey());
int b = mapS2.get(entry.getKey());
if(a > 0 && b >= 0) count += Math.min(a, b);
}
return count;
}更正和工作版本:谢谢大家!
static int res(String s1, String s2) {
HashMap<Character, Integer> mapS1 = new HashMap<>();
HashMap<Character, Integer> mapS2 = new HashMap<>();
int count = 0;
for(int i = 0; i < s1.length(); i++)
mapS1.put(s1.charAt(i), mapS1.getOrDefault(s1.charAt(i), 0) + 1);
for(int i = 0; i < s2.length(); i++)
mapS2.put(s2.charAt(i), mapS2.getOrDefault(s2.charAt(i), 0) + 1);
for(Map.Entry<Character, Integer> entry : mapS1.entrySet()) {
int a = mapS1.getOrDefault(entry.getKey(), 0);
int b = mapS2.getOrDefault(entry.getKey(), 0);
System.out.println(a + " " + b);
count += Math.min(a, b);
}
return count;
}发布于 2020-03-18 23:19:08
您的代码中有两个问题。首先,“不太重要”的是复制-粘贴错误。在第二个循环中,您再次向mapS1添加元素,我认为它应该是mapS2。
正如你在评论中提到的,主要的问题是你在这一行中得到的NullPointerException:
int b = mapS2.get(entry.getKey());这是因为如果给定键没有任何值,它将返回null。然后,应该将该null分配给b,它是一个int。int变量不接受空值,因此抛出NPE。最简单的解决方案是,如果不存在任何映射,则返回默认值。你可以这样做:
int b = mapS2.getOrDefault(entry.getKey(), 0);发布于 2020-03-18 23:11:51
我认为你在这里有一个错误:
for(int i = 0; i < s2.length(); i++)
mapS1.put(...); //<------ should be mapS2.put?https://stackoverflow.com/questions/60742111
复制相似问题