【发布时间】:2015-12-22 00:59:57
【问题描述】:
我尝试为字谜编写一个小代码,然后我写了下面的 onw。
String s = "anagram";
String t = "nagara";
Map<Character,Integer> map1 = new HashMap<Character,Integer>();
Map<Character,Integer> map2 = new HashMap<Character,Integer>();
if (s.length() != t.length()) {
System.out.println("Not an anagram");
} else {
for (int i= 0;i<s.length();i++) {
char c = s.charAt(i);
char d = t.charAt(i);
if (map1.containsKey(c)) {
map1.put(c, map1.get(c)+1);
} else {
map1.put(c,1);
}
if (map2.containsKey(d)) {
map2.put(d, map2.get(d)+1);
} else {
map2.put(d,1);
}
}
for (Map.Entry<Character, Integer> entry : map1.entrySet()) {
if (!map2.containsKey(entry.getKey())) {
System.out.println("Not an anagram");
} else if (entry.getValue() != map2.get(entry.getKey())) {
System.out.println("Not an anagram");
}
}
}
这几乎适用于所有情况,但是当我放入 leetcode 进行检查时,对于具有 50000 个字符的最长字谜之一,它失败了。 谁能指出我这里看起来有什么问题?
【问题讨论】:
-
entry.getValue() != map2.get(entry.getKey())将测试 Integer 对象身份。试试!entry.getValue().equals(map2.get(entry.getKey()))。不确定这是否会回答您的问题,因为我无法尝试您的测试用例。 -
到底是什么失败了?您收到错误消息吗?
-
是的。这很好用。谢谢