#include<bits/stdc++.h> en
utilisant l'espace de noms std ;
#define MAX_CHARS 160
// Cette fonction renvoie true si str1 et str2 sont ismorphes
bool areIsomorphic(string str1, string str2)
{
int m = str1.length(), n = str2.length();
// La longueur des deux chaînes doit être la même pour une
// correspondance
if (m != n)
return false;
// Pour marquer les caractères visités dans str2
bool marqué[MAX_CHARS] = {false};
// Pour stocker le mappage de chaque caractère de str1 à
// celui de str2. Initialisez toutes les entrées de la carte comme -1.
carte int[MAX_CHARS];
memset(carte, -1, taillede(carte));
// Traiter tous les caractères un par un
pour (int i = 0; i < n; i++)
{
// Si le caractère actuel de str1 est vu en premier
// fois dedans.
if (map[str1[i]] == -1)
{
// Si le caractère actuel de str2 est déjà
// vu, le mappage un à un n'est pas possible
if (marked[str2[i]] == true)
return false;
// Marquer le caractère actuel de str2 comme visité
marqué[str2[i]] = true;
// Stockage du mappage des caractères actuels
map[str1[i]] = str2[i];
}
// S'il ne s'agit pas de la première apparition du
// caractère actuel dans str1, alors vérifiez si
// l'apparence précédente correspond au même caractère de str2
else if (map[str1[i]] != str2[i])
return false;
}
renvoie vrai ;
}
// Programme pilote
int main()
{
cout << areIsomorphic("bbb", "yyy") << endl;
cout << areIsomorphic("aab", "yyz") << endl;
renvoie 0 ;
}