Isomorphic Strings - 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.

🙋‍♂️ Shubham Verma    🗓 July 11, 2021

Isomorphic Strings:

Given two strings s and t, determine if they are isomorphic.
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

Example 2:

Input: s = "foo", t = "bar"
Output: false

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.

Solution:

``````                                    /**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
let size = 256;
var isIsomorphic = function(str1, str2) {

let m = str1.length;
let n = str2.length;

// Length of both strings must be same
// for one to one corresponance
if(m != n)
return false;

// To mark visited characters in str2
let marked = new Array(size);

for(let i = 0; i < size; i++)
marked[i]= false;

// To store mapping of every character
// from str1 to that of str2 and
// Initialize all entries of map as -1.
let map = new Array(size);
map.fill(0);

for(let i = 0; i < size; i++)
map[i]= -1;

// Process all characters one by on
for (let i = 0; i < n; i++)
{

// If current character of str1 is
// seen first time in it.
if (map[str1[i].charCodeAt()] == -1)
{

// If current character of str2
// is already seen, one to
// one mapping not possible
if (marked[str2[i].charCodeAt()] == true)
return false;

// Mark current character of
// str2 as visited
marked[str2[i].charCodeAt()] = true;

// Store mapping of current characters
map[str1[i].charCodeAt()] = str2[i].charCodeAt();
}

// If this is not first appearance of current
// character in str1, then check if previous
// appearance mapped to same character of str2
else if (map[str1[i].charCodeAt()] != str2[i].charCodeAt())
return 0;
}

return 1;
};
``````

Output:

Isomorphic Strings

Support our IDKBlogs team

Creating quality content takes time and resources, and we are committed to providing value to our readers. If you find my articles helpful or informative, please consider supporting us financially.

Any amount (10, 20, 50, 100, ....), no matter how small, will help us continue to produce high-quality content.

Thank you

I appreciate you taking the time to read this article. The more that you read, the more things you will know. The more that you learn, the more places you'll go. If you’re interested in Node.js or JavaScript this link will help you a lot.