Given two (dictionary) words as Strings, determine if they are isomorphic

来源:互联网 发布:子域名查询工具 编辑:程序博客网 时间:2024/05/26 08:42
Given two (dictionary) words as Strings, determine if they are isomorphic
. Two words are called isomorphic if the letters in one word can be remapped
to get the second word. Remapping a letter means replacing all occurrences 
of it with another letter while the ordering of the letters remains 
unchanged. No two letters may map to the same letter, but a letter may map 
to itself.

Example:
Given "foo", "app"; returns true
   we can map 'f' -> 'a' and 'o' -> 'p'
Given "bar", "foo"; returns false
   we can't map both 'a' and 'r' to 'o'

Given "turtle", "tletur"; returns true
   we can map 't' -> 't', 'u' -> 'l', 'r' -> 'e', 'l' -> 'u', 'e' -'r'

Given "ab", "ca"; returns true

   we can map 'a' -> 'c', 'b' ->'a' 


bool isomorphic(const string& s1, const string& s2){if(s1.length() != s2.length())return false;unordered_map<char,char> ht;unordered_map<char,char> reverseHT;for(size_t i = 0;i<s1.length();++i){auto it = ht.find(s1[i]);if(it == ht.end())        {            auto itt = reverseHT.find(s2[i]);            if(itt == reverseHT.end())            {                ht.insert(make_pair(s1[i],s2[i]));                reverseHT.insert(make_pair(s2[i],s1[i]));            }            else if(itt->second != s1[i])                return false;        }        else if(it->second != s2[i])            return false;}return true;}


0 0
原创粉丝点击