Table of Contents
Problem Statement
Isomorphic Strings LeetCode Solution – Given two strings s and t, determine if they are isomorphic.
Two strings s and t are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character, but a character may map to itself.

Input: s = "egg", t = "add" Output: true
Explanation
The key-value pairs in the dictionary are the correspondence of the letter of the first word to the letter of the second word.
For example:
a = ‘title’, b = ‘paper’
In dict:
“t” : “p”
“i” : “a”
“l” : “e”
“e” : “r”
During the loop, we check if the letter has occurred to us before, and if so, we check if it “equals” the same letter from the second word as before.
After the loop, we check that the different keys do not correspond to the same value (that is, that different letters from the first word do not equal the same letter from the second one).
- We define a dictionary
mapping_s_twhich will be used to map characters in the stringsto characters in the stringtand another dictionarymapping_t_swhich will be used to map characters in the stringtto characters in the strings. - Next, we iterate over the two strings one character at a time.
- Let’s assume the character in the first string is
c1and the corresponding character in the second string isc2.- If
c1does not have a mapping inmapping_s_tandc2does not have a mapping inmapping_t_s, we add the corresponding mappings in both dictionaries and move on to the next character. - At this point, we expect both the character mappings to exist in the dictionaries and their values should be
mapping_s_t[c1] = c2andmapping_t_s[c2] = c1. If either of these conditions fails (c1is not in the dictionary,c2is not in the dictionary, unexpected mapping), we returnfalse.
- If
- Return
trueonce both the strings have been exhausted.
Code
Java Code For Isomorphic Strings
class Solution {
public boolean isIsomorphic(String s, String t) {
int[] mappingDictStoT = new int[256];
Arrays.fill(mappingDictStoT, -1);
int[] mappingDictTtoS = new int[256];
Arrays.fill(mappingDictTtoS, -1);
for (int i = 0; i < s.length(); ++i) {
char c1 = s.charAt(i);
char c2 = t.charAt(i);
// Case 1: No mapping exists in either of the dictionaries
if (mappingDictStoT[c1] == -1 && mappingDictTtoS[c2] == -1) {
mappingDictStoT[c1] = c2;
mappingDictTtoS[c2] = c1;
}
// Case 2: Ether mapping doesn't exist in one of the dictionaries or Mapping exists and
// it doesn't match in either of the dictionaries or both
else if (!(mappingDictStoT[c1] == c2 && mappingDictTtoS[c2] == c1)) {
return false;
}
}
return true;
}
}Python Code For Isomorphic Strings
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
mapping_s_t = {}
mapping_t_s = {}
for c1, c2 in zip(s, t):
# Case 1: No mapping exists in either of the dictionaries
if (c1 not in mapping_s_t) and (c2 not in mapping_t_s):
mapping_s_t[c1] = c2
mapping_t_s[c2] = c1
# Case 2: Ether mapping doesn't exist in one of the dictionaries or Mapping exists and
# it doesn't match in either of the dictionaries or both
elif mapping_s_t.get(c1) != c2 or mapping_t_s.get(c2) != c1:
return False
return TrueComplexity Analysis for Isomorphic Strings LeetCode Solution
Time Complexity
O(N)
Space Complexity
O(1)