205. 同构字符串

题目

这道题一直想着用一个哈希表能不能做出来,最终没有做出来。

看了卡哥思路,卡哥是用了两个哈希表,使用两个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是否存在。

posted @ 2025-01-14 14:02  hisun9  阅读(3)  评论(0)    收藏  举报