1、题目描述
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
2、算法分析
题目说的是判断两个字符串 s 和 t,判断它们是否是同构的。
本题使用的是Map映射。
也就是说 add-->egg,a映射e,d映射g。
根据题目中给的示例,o重复的一定是映射同一个字符。
输入:s ="foo",
t ="bar"
输出:false接下来,判断map中是否包含这个key,不包含的话就put,包含的话,就看映射的是否为原来c1映射的。不是的话返回false;
3、代码实现
import java.util.*;
class Solution {
public boolean isIsomorphic(String s, String t) {
return isBuild(s,t) && isBuild(t,s);
}
public boolean isBuild(String s, String t){
if(s.length() != t.length()){
return false;
}
Map<Character,Character> map = new HashMap<>();
// 遍历字符串,当然s,t的字符串长度都是相等的。
for(int i = 0;i < s.length();i++){
// 获取s,t字符串的字符
char c1 = s.charAt(i);
char c2 = t.charAt(i);
// 判断映射关系
if(!map.containsKey(c1)){
map.put(c1,c2);
}else{
if(map.get(c1) != c2){
return false;
}
}
}
return true;
}
}