2016-08-19 72 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