Se dice que dos strings son isomorfas si es posible asignar cada carácter de la primera string a cada carácter de la segunda string. Básicamente, en las strings isomorfas, existe un mapeo uno a uno entre cada carácter de la primera string y cada carácter de la segunda string.
Ejemplo 1:
str1 = 'ABCA' str2 = 'XYZX' 'A' maps to 'X' 'B' maps to 'Y' 'C' maps to 'Z'
Aquí, el mapeo es posible entre cada carácter de la primera string a cada carácter de la segunda string. Entonces str1 y str2 son isomorfos.
Ejemplo 2:
str1 = 'ABCA' str2 = 'WXYZ' 'A' maps to 'W' 'B' maps to 'X' 'C' maps to 'Y' 'A' again maps to 'Z'
Estas dos strings no son isomorfas porque el carácter ‘A’ de la primera string se correlaciona con dos caracteres de la segunda string.
Una forma posible de verificar strings isomorfas es si podemos reemplazar cada carácter de la primera string con un carácter para obtener la segunda string y viceversa.
Enfoque: para verificar si las strings son isomorfas o no, debemos tener en cuenta las siguientes condiciones:
- La longitud de ambas strings debe ser igual.
- El carácter actual de ambas strings no debería estar mapeado con otros caracteres ya.
Usaremos un hashmap para almacenar el mapeo entre los caracteres de str1 a los de str2. También usaremos un Set para almacenar los caracteres ya mapeados de str2.
A continuación se muestra la implementación del enfoque anterior.
Javascript
<script> // JavaScript program for above approach // Function to check isomorphic strings function isIsomorphic(str1, str2) { // If length of strings are not equal then // they are not isomorphic if (str1.length !== str2.length) { return false; } // Map to store the mapping between // characters of first string to second const map = new Map(); // Set to store the already mapped // character of second string const set = new Set(); for (let i = 0; i < str1.length; i++) { // Taking ith char from both strings char1 = str1.charAt(i); char2 = str2.charAt(i); // If char1 has already been mapped if (map.has(char1) == true) { // Then we have to check that // mapped char should be same if (map.get(char1) !== char2) { return false; } } // If char1 is appearing for the first time else { // Check in the set that the char2 // is already there or not if (set.has(char2)) { return false; } // If none of above condition is true // it means both char1 and char2 are // appearing for the first time // insert them into the map map.set(char1, char2); set.add(char2); } } return true; } str1 = "ABCA"; str2 = "XYZX"; document.write(isIsomorphic(str1, str2)); </script>
Producción:
true
Publicación traducida automáticamente
Artículo escrito por hritikrommie y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA