给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
这是一个简单题目,我自己做的时候先是忽视了方向映射,同时再做的时候用了二次循环,虽然通过且效率还行但实际上单次循环即可解决问题
输入为两个string字符串s,t
第一步,先判断字符串size是否相同
第二步定义两个键和值都为char的哈希表smap,tmap
第三步for循环(int i=0;i<s.size();++i) 循环结束跳到第九不
第四步 赋值将 char sh = s[i],th = t[i]
第五步 判断smap[s[i]]是否存在,若是再判断smap[s[i]]是否不等于th,若不等于return false若不存在第六步
第六步 smap[s[i]] = th
第七步 判断tmap[t[i]]是否存在,若是再判断smap[t[i]]是否不等于sh,若不等于return false若不存在第八步
第九步循环结束 return true
class Solution {
public:
bool isIsomorphic(string s, string t) {
if(s.size() != t.size())return false;
std::unordered_map<char,char> smap;
std::unordered_map<char,char> tmap;
for(int i=0;i<s.size();++i){
if(smap.find(s[i]) != smap.end()){
if(smap[s[i]] != t[i]){
return false;
}
}
else smap[s[i]] = t[i];
if(tmap.find(t[i]) != tmap.end()){
if(tmap[t[i]] != s[i]){
return false;
}
}
else tmap[t[i]] = s[i];
}
return true;
}
};