Verifique que dos strings dadas sean isomorfas en JavaScript

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *