#include <bits / stdc ++. h>
using namespace std;
#define MAX_CHARS 160
// Эта функция возвращает истину, если str1 и str2 изморфны
bool areIsomorphic (string str1, string str2)
{
int m = str1.length (), n = str2.length ();
// Длина обеих строк должна быть одинаковой для
соответствия // один к одному
if (m! = N)
return false;
// Для отметки посещенных символов в str2
bool Marked [MAX_CHARS] = {false};
// Чтобы сохранить отображение каждого символа из str1 в
// str2. Инициализировать все записи карты как -1.
int map [MAX_CHARS];
memset (карта, -1, sizeof (карта));
// Обработка всех символов по очереди
for (int i = 0; i <n; i ++)
{
// Если текущий символ str1
// отображается в нем впервые.
if (map [str1 [i]] == -1)
{
// Если текущий символ str2 уже
// виден, однозначное сопоставление невозможно
if (помечено [str2 [i]] == true)
return false;
// Пометить текущий символ str2 как посещенный
отмеченный [str2 [i]] = true;
// Сохраняем отображение текущих символов
map [str1 [i]] = str2 [i];
}
// Если это не первое появление текущего
// символа в str1, тогда проверяем, соответствует ли предыдущее
// появление тому же символу str2
else if (map [str1 [i]]! = Str2 [i])
return false;
}
вернуть истину;
}
// Программа-драйвер
int main ()
{
cout << areIsomorphic ("bbb", "yyy") << endl;
cout << areIsomorphic ("aab", "yyz") << endl;
возврат 0;
}