同构字符串(简单)
2020年5月28日
题目来源:力扣
解题
哈希表
因为s和t的长度一样,所以可以采用哈希表记录出现过的字符key与其配对的字符value,如果再出现key,判断value是否跟之前一样,不一样返回false;如果key是第一次出现,判断之前有没有key转化成这个value,有的话就返回false。
class Solution {
public boolean isIsomorphic(String s, String t) {
Map<Character,Character> map=new HashMap<>();
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
if(map.get(s.charAt(i))!=t.charAt(i)){
return false;
}
}
else{
if(map.containsValue(t.charAt(i))){
return false;
}
map.put(s.charAt(i),t.charAt(i));
}
}
return true;
}
}
第三方对比法
我乱起的名字,见怪莫怪
打个比方,一个人说中文,一个人说日语,都把他们说的翻译成英语,那就知道他们说的是不是一个意思了。
回归题目,如果s为"add",翻译成122;t为"egg",也翻译成122,那就匹配上了。
用两个数组分别对应s、t的字符映射,每次都同时进行用i值进行记录;如果出现s、t的字符映射不同,就说明不同构。
class Solution {
public boolean isIsomorphic(String s, String t) {
int[] smap=new int[128];
int[] tmap=new int[128];
for(int i=0;i<s.length();i++){
if(smap[s.charAt(i)]!=tmap[t.charAt(i)]){
return false;
}
smap[s.charAt(i)]=i+1;
tmap[t.charAt(i)]=i+1;
}
return true;
}
}