Easy
自己做的,但很慢,代码也不简洁Time:O(N) Space:O(N)
注意一下像hashSet这种collection比较是否相等可以直接用equals方法。
class Solution {
public boolean isIsomorphic(String s, String t) {
char[] source = s.toCharArray();
char[] target = t.toCharArray();
Map<Character, HashSet<Character>> map = new HashMap<>();
for (int i = 0; i < source.length; i++){
char c = source[i];
if (!map.containsKey(c)){
map.put(c, new HashSet<Character>(Arrays.asList(target[i])));
} else {
map.get(c).add(target[i]);
}
}
Set<Set<Character>> values = new HashSet<>();
for (HashSet<Character> value : map.values()){
values.add(value);
if (value.size() > 1){
return false;
}
}
if (values.size() != map.values().size()){
return false;
}
return true;
}
}
But, 我觉得这种easy题的目的最终是让你做一个O(1) Space的方法或者至少代码简介明了:
差距呀……
class Solution {
public boolean isIsomorphic(String s, String t) {
Map<Character, Character> map = new HashMap<>();
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 (map.containsValue(c2)){
return false;
}
map.put(c1, c2);
}
}
return true;
}
}