给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s ="egg"
, t ="add"
输出:true
示例 2:
输入:s ="foo"
, t ="bar"
输出:false
示例 3:
输入:s ="paper"
, t ="title"
输出:true
提示:
1 <= s.length <= 5 * 104
t.length == s.length
s
和t
由任意有效的 ASCII 字符组成
class Solution {
public:
bool isIsomorphic(string s, string t) {
vector<int> b1(256);
vector<int> b2(256);
for(int i=0;i<s.size();++i){
char a =s[i];
char b=t[i];
if(b1[a]==b2[b])
b1[a]=b2[b]=i+1;
else
return false;
}
return true;
}
};
一个一个对比,如果原来的哈希表中数据相同(包括0的情况)(也就是没有建立映射,则b1[a]=b2[a]=i+1;建立映射,如果原来的哈希表中数据不相同,也就是找到了两个不同的映射,就返回false。