← Hashing

Isomorphic Strings Hash

Easy
Python
def is_isomorphic(s,t):
    return len(set(zip(s,t)))==len(set(s))==len(set(t))
Java
public boolean isIsomorphic(String s,String t){
    Map<Character,Character> st=new HashMap<>(),ts=new HashMap<>();
    for(int i=0;i<s.length();i++){
        char sc=s.charAt(i),tc=t.charAt(i);
        if(st.containsKey(sc)&&st.get(sc)!=tc) return false;
        if(ts.containsKey(tc)&&ts.get(tc)!=sc) return false;
        st.put(sc,tc); ts.put(tc,sc);
    } return true;
}

Key Insight

Python zip+set one-liner. Java explicit bidirectional maps.

Python → Java Differences

  • Python elegant one-liner
  • Java bidirectional maps
  • zip() creates pairs
Python
def is_isomorphic(s,t):
    return len(set(zip(s,t)))==len(set(s))==len(set(t))
Java
public boolean isIsomorphic(String s,String t){
    Map<Character,Character> st=new HashMap<>(),ts=new HashMap<>();
    for(int i=0;i<s.length();i++){
        char sc=s.charAt(i),tc=t.charAt(i);
        if(st.containsKey(sc)&&st.get(sc)!=tc) return false;
        if(ts.containsKey(tc)&&ts.get(tc)!=sc) return false;
        st.put(sc,tc); ts.put(tc,sc);
    } return true;
}

Algorithm Steps

1. Check bijection both ways