给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s = “egg”, t = “add”
输出:true
示例 2:
输入:s = “foo”, t = “bar”
输出:false
示例 3:
输入:s = “paper”, t = “title”
输出:true
提示:
可以假设 s 和 t 长度相同。
思路:
因为本题中没有明确说明都是小写字母,所以不能简单的使用数组来做,要考虑周全所以可以采用哈希表来做,建立映射然后进行判断是否和上一次建立的映射值相等进行判断是否是同构。
代码区:
class Solution {
public:
bool isIsomorphic(string s, string t) {
unordered_map<char,char> maps;//定义两个hashmap
unordered_map<char,char> mapt;//分别用来从s到t进行遍历和从t到s进行遍历
int n=s.length();
for(int i=0;i<n;i++){
if((maps.count(s[i])&&maps[s[i]]!=t[i])||(mapt.count(t[i])&&mapt[t[i]]!=s[i])){
//如果该字母已经出现过了那么说明该字母有一个对应的映射值,所以当该映射值与t中对应字母不相等的时候就判断为错
//如果还没有出现过该字母就无事发生,在下面建立相应的映射
//为避免出现多对一的情况,所以需要s到t和t到s都进行一遍
return false;
}
maps[s[i]]=t[i];//建立对应的映射
mapt[t[i]]=s[i];
}
return true;
}
};
新手上路,有错请指正;