#include <iostream>
#include <map>
using namespace std;
class Solution {
public:
bool isIsomorphic(string s, string t) {
if(s.size() != t.size())
return false;
map<char, int> ms;
map<char, int> mt;
bool first = true;
for(int i = 0; i <= s.size(); i++)
{
cout << i << " " << s[i] << ' ' << t[i] << endl;
if(ms[s[i]] != mt[t[i]])
{
first = false;
break;
}
else
ms[s[i]] = mt[t[i]] = i;
}
cout << "first " << first << endl;
ms.clear();
mt.clear();
int n = s.size();
int i = n;
bool second = true;
for (; i >= 0 ; --i) {
if (ms[s[n-i]] != mt[t[n-i]])/*|| s[i] == t[i]*/
{
second = false;
break;
}
else
ms[s[n-i]] = mt[t[n-i]] = i;
}
cout << "second " << second << endl;
return second;
}
};
int main() {
Solution sol;
//sol.isIsomorphic("egg", "add");
//sol.isIsomorphic("foo", "bar");
//sol.isIsomorphic("paper", "title");
sol.isIsomorphic("aa", "ab");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICBib29sIGlzSXNvbW9ycGhpYyhzdHJpbmcgcywgc3RyaW5nIHQpIHsKCQoJICAgIGlmKHMuc2l6ZSgpICE9IHQuc2l6ZSgpKQoJICAgICAgICByZXR1cm4gZmFsc2U7CgkKCSAgICBtYXA8Y2hhciwgaW50PiBtczsKCSAgICBtYXA8Y2hhciwgaW50PiBtdDsKCQoJCWJvb2wgZmlyc3QgPSB0cnVlOwoJCWZvcihpbnQgaSA9IDA7IGkgPD0gcy5zaXplKCk7IGkrKykKCSAgICB7CgkgICAgCWNvdXQgPDwgaSA8PCAiICIgPDwgc1tpXSA8PCAnICcgPDwgdFtpXSA8PCBlbmRsOwoJICAgICAgICBpZihtc1tzW2ldXSAhPSBtdFt0W2ldXSkKCSAgICAgICAgewoJICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwoJICAgICAgICAgICBicmVhazsKCSAgICAgICAgfQoJICAgICAgICBlbHNlCgkgICAgICAgICAgICBtc1tzW2ldXSA9IG10W3RbaV1dID0gaTsKCSAgICB9CgkJY291dCA8PCAiZmlyc3QgIiA8PCBmaXJzdCA8PCBlbmRsOwoJCQoJCW1zLmNsZWFyKCk7CgkJbXQuY2xlYXIoKTsKCQoJICAgIGludCBuID0gcy5zaXplKCk7CgkgICAgaW50IGkgPSBuOwoJCgkJYm9vbCBzZWNvbmQgPSB0cnVlOwoJICAgIGZvciAoOyBpID49IDAgOyAtLWkpIHsKCSAgICAgICAgaWYgKG1zW3Nbbi1pXV0gIT0gbXRbdFtuLWldXSkvKnx8IHNbaV0gPT0gdFtpXSovCgkgICAgICAgIHsKCSAgICAgICAgICAgIHNlY29uZCA9IGZhbHNlOwoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgIH0KCSAgICAgICAgZWxzZQoJICAgICAgICAgICAgbXNbc1tuLWldXSA9IG10W3Rbbi1pXV0gPSBpOwoJICAgIH0KCSAgICBjb3V0IDw8ICJzZWNvbmQgIiA8PCBzZWNvbmQgPDwgZW5kbDsKCSAgICByZXR1cm4gc2Vjb25kOwoJfSAKfTsKCmludCBtYWluKCkgewoJU29sdXRpb24gc29sOwoJLy9zb2wuaXNJc29tb3JwaGljKCJlZ2ciLCAiYWRkIik7CgkvL3NvbC5pc0lzb21vcnBoaWMoImZvbyIsICJiYXIiKTsKCS8vc29sLmlzSXNvbW9ycGhpYygicGFwZXIiLCAidGl0bGUiKTsKCXNvbC5pc0lzb21vcnBoaWMoImFhIiwgImFiIik7CglyZXR1cm4gMDsKfQ==