问题分析:
当给定的s和t为空时,直接返回false
if(s==null||t==null) {
return false;
}
由于给定的两个字符串s和t长度时一样的,所以我们就不用判断这个问题。我们可以直接创建s到t的映射。
重点: 如下图
Map<Character,Character> map=new HashMap<>();//s到t的映射
for(int i=0;i<s.length();i++) {//遍历键的长度,准备添加k到map中
if(!map.containsKey(s.charAt(i))) {//如果键不存在map中,就新添
//s:foo t:ccd
/*
考虑到这种情况,也就是我上图的重点,如果在添加键值对的时候,
f对应的是c,
第二次添加的时候 o对应的也是c,f和o对应的value一样,
那么就不符合我们的题意了。
所以直接返回false。反之则添加
*/
if(!map.containsValue(t.charAt(i))) {//对value判断
map.put(s.charAt(i), t.charAt(i));
}else {
return false;
}
}else {//示例2 当s对应的k键值和下一个k键值相等时,那么就判断他们两个
//对应的value是否相等。
if(map.get(s.charAt(i))!=t.charAt(i)) {
return false;
}
}
}
return true;