2016-08-19 11 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; 

} 

2つの文字列sとtが与えられた場合、それらが同形であるかどうかを判断します。 テストケースが「ab」「aa」の場合。 res2がnullに等しくないこと、res2が等しくないことnullにする誰かが理由を教えてもらえますか?どうもありがとう!ヌルポインタ例外があるがnullがないことを確認した理由

+1

完全なスタックトレースを表示し、理想的には[mcve]を表示してください。 –

+3

例外のソースではないかもしれませんが、 's'と' t'をchar配列に変換してからヌルをチェックします。最初に小切手を置く必要があります。 –

+0

無関係ですが、 'char []'と '=='と '!='を比較したくないでしょう。 –

答えて

1

おそらく起こっていることは、res1.get(sToArray[i])nullであるということです。その場合、Charactercharと比較します。これはCharacterでアンボックス操作が必要ですが、nullであり、NPEがスローされます。

の値がそのキーに関連付けられている場合、res1.containsKey(sToArray[i])はtrueを返します。

+0

ありがとう!あなたはきわめて正しいです。 – tjuli

関連する問題