public static boolean isIsomorphic(String s, String t) {
HashMap<Character, Character> res1 = new HashMap<Character, Character>();
HashMap<Character, Character> res2 = new HashMap<Character, Character>();
char[] sToArray = s.toCharArray();
char[] tToArray = t.toCharArray();
if (s == null && t == null)
return true;
if (s == null || t == null || s.length() != t.length())
return false;
for (int i = 0; i < sToArray.length; i++) {
***if ((!res1.containsKey(sToArray[i])) && (!res2.containsKey(tToArray[i])))*** {
res1.put(sToArray[i], tToArray[i]);
res2.put(tToArray[i], sToArray[i]);
} else {
if ((res1.get(sToArray[i]) != tToArray[i]) || (res2.get(tToArray[i]) != sToArray[i]))
return false;
}
}
return true;
}
给定两个字符串s和t,确定它们是否是同构的。 当测试用例是“ab”“aa”时;会有一个nullpointerexception if((!res1.containsKey(sToArray [i]))&amp;&amp;(!res2.containsKey(tToArray [i]))) 我检查res1不等于null,res2不等于null。有人能说出原因吗?非常感谢!
答案 0 :(得分:1)
可能发生的事情是res1.get(sToArray[i])
是null
。然后,您将Character
与char
进行比较,这需要对Character
进行拆箱操作 - 但它会为空并且会抛出NPE。
请注意,如果与该关键字相关联的res1.containsKey(sToArray[i])
值,null
将返回true。