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.
Example 1:
Input:s = "egg", t = "add"
Output:true
Explanation:
The strings s and t can be made identical by:
Mapping 'e' to 'a'.
Mapping 'g' to 'd'.
Example 2:
Input:s = "foo", t = "bar"
Output:false
Explanation:
The strings s and t can not be made identical as 'o' needs to be mapped to both 'a' and 'r'.
Example 3:
Input:s = "paper", t = "title"
Output:true
Constraints:
1 <= s.length <= 5 * 104
t.length == s.length
s and t consist of any valid ascii character.
Solutions
Solution 1: Hash Table or Array
We can use two hash tables or arrays \(d_1\) and \(d_2\) to record the character mapping relationship between \(s\) and \(t\).
Traverse \(s\) and \(t\), if the corresponding character mapping relationships in \(d_1\) and \(d_2\) are different, return false, otherwise update the corresponding character mapping relationships in \(d_1\) and \(d_2\). After the traversal is complete, it means that \(s\) and \(t\) are isomorphic, and return true.
The time complexity is \(O(n)\) and the space complexity is \(O(C)\). Where \(n\) is the length of the string \(s\); and \(C\) is the size of the character set, which is \(C = 256\) in this problem.