Given two strings s and t, determine if they are isomorphic.
Two strings are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.
For example,
Given "egg"
, "add"
, return true.
Given "foo"
, "bar"
, return false.
Given "paper"
, "title"
, return true.
Note:
You may assume both s and t have the same length.
Subscribe to see which companies asked this question
遍历s的每一个字母,并且记录s[i]到t[i]的映射,当发现与已有的映射不同时,说明无法同构,直接return false。
必须保证二者字符相对应,则需要记录t[i]到s[i]的映射.
主要是建立映射关系,map<char,char> 就是map(s[i])=t[i].
class Solution {
public:
bool isIsomorphic(string s, string t) {
if (s.length() != t.length()) return false;
map<char,char>t1;
map<char,char>t2;
for(int i=0;i<s.length();i++)
{
char tem1=s[i];
char tem2=t[i];
if(t1.find(tem1)==t1.end()) t1[tem1]=tem2;
else if(t1[tem1]!=tem2) return false;
if(t2.find(tem2)==t2.end()) t2[tem2]=tem1;
else if(t2[tem2]!=tem1) return false;
}
return true;
}
};