这道题一直想着用一个哈希表能不能做出来,最终没有做出来。
看了卡哥思路,卡哥是用了两个哈希表,使用两个map 保存 s[i] 到 t[j] 和 t[j] 到 s[i] 的映射关系,如果发现对应不上,立刻返回 false。
看了卡哥代码敲的:
class Solution {
public:
bool isIsomorphic(string s, string t) {
unordered_map<char, char> map1;
unordered_map<char, char> map2;
for (int i = 0; i < s.size(); ++i)
{
if (map1.find(s[i]) == map1.end())
map1[s[i]] = t[i];
if (map2.find(t[i]) == map2.end())
map2[t[i]] = s[i];
if (map1[s[i]] != t[i] || map2[t[i]] != s[i])
return false;
}
return true;
}
};
然后再重新审视了下题目,其中题目中的这段话:不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,似乎就是在暗示我们要用两个哈希表来做,从s到t的映射只能解决相同字符只能映射到同一个字符上,从t到s的映射只能解决不同字符不能映射到同一个字符上。感觉这一切的根源是find函数的使用,find函数是查找键key是否存在。
标签:字符,同构,205,映射,map2,map1,字符串,卡哥,find From: https://www.cnblogs.com/hisun9/p/18670644