题目要求:
Given two strings s and t, determine if they are isomorphic.
Two strings are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.
For example,
Given “egg”, “add”, return true.
Given “foo”, “bar”, return false.
Given “paper”, “title”, return true.
Note:
You may assume both s and t have the same length.
这个题目一开始理解有问题,只是想了每一个字符出现的次数,导致结果总是不对
其实,是要求每一个字符串都要有自己对应对位置的字符串相对应
所以创建一个map ,一个 set
在map中存放key –> s中每一个字符
value –> 存放相对应的t中的字符
在set中存放 t中的字符
使用循环的方式进行遍历,当发现map中value与t当前的字符串对应不上时,返回false
当map中没有而set中有的时候 返回false
如果不是以上的两种情况,发那个别进行添加到map和set中
public class fix {
//判断字符串是否是同构的
public boolean isIsomorphic(String s, String t) {
//创建 map用于保存 s和t 的字符
//创建set用于保存 映射关系
if(s.length() == 0 || t.length() == 0) return false;
if(s.length() != t.length()) return false;
Map<Character, Character> map = new HashMap<Character, Character>();
Set<Character> set = new HashSet<Character>();
for(int i = 0; i < s.length(); i++) {
char c1 = s.charAt(i);
char c2 = t.charAt(i);
if(map.containsKey(c1)) {
if(map.get(c1) != c2) return false;
}
else {
if(set.contains(c2)) return false;
else{
map.put(c1, c2);
set.add(c2);
}
}
}
return true;
}
}