#include <bits / stdc ++. h>
usando el espacio de nombres std;
#define MAX_CHARS 160
// Esta función devuelve verdadero si str1 y str2 son ismorphic
bool areIsomorphic (string str1, string str2)
{
int m = str1.length (), n = str2.length ();
// La longitud de ambas cadenas debe ser la misma para una correspondencia de uno a uno
//
if (m! = N)
return false;
// Para marcar los caracteres visitados en str2
bool marcados [MAX_CHARS] = {false};
// Para almacenar el mapeo de cada carácter desde str1 hasta
// el de str2. Inicialice todas las entradas del mapa como -1.
int mapa [MAX_CHARS];
memset (mapa, -1, tamaño de (mapa));
// Procesar todos los caracteres uno por uno
para (int i = 0; i <n; i ++)
{
// Si el carácter actual de str1 se ve por primera
vez // vez en él.
if (map [str1 [i]] == -1)
{
// Si el carácter actual de str2 ya está
// visto, el mapeo uno a uno no es posible
if (marcado [str2 [i]] == true)
return false;
// Marcar el carácter actual de str2 como visitado
marcado [str2 [i]] = true;
// Almacenar el mapeo del mapa de caracteres actual
[str1 [i]] = str2 [i];
}
// Si esta no es la primera aparición del
carácter // actual en str1, entonces verifique si la
apariencia anterior // se asignó al mismo carácter de str2
else if (map [str1 [i]]! = Str2 [i])
return false;
}
devuelve verdadero;
}
// Programa controlador
int main ()
{
cout << areIsomorphic ("bbb", "yyy") << endl;
cout << areIsomorphic ("aab", "yyz") << endl;
return 0;
}