2016-08-19 60 views
1
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”时; ((!res1.containsKey(sToArray [i]))& &(!res2.containsKey(tToArray [i]))) 我检查了res1不等于null,res2不等于( )将会出现nullpointerexception为空。有人能说出原因吗?非常感谢!为什么有空指针异常,但我已检查没有空

+1

请显示完整的堆栈跟踪,最好是[mcve]。 –

+3

可能不是你的异常的来源,但你在检查它们为null之前将's'和't'转换为char数组。你必须先进行检查。 –

+0

不相关,但您可能不想将这些'char []'与'=='和'!='进行比较。 –

回答

1

可能发生的事情是res1.get(sToArray[i])null。然后,您将Characterchar进行比较,该操作需要对Character进行拆箱操作 - 但它为空,并且引发了NPE。

请注意,如果存在与该密钥相关联的null值,则res1.containsKey(sToArray[i])将返回true。

+0

谢谢!你非常正确。 – tjuli