205. 同构字符串(与290类似,290是判断字符串规律是否相同)
290:https://editor.csdn.net/md/?articleId=111302360
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
思路:hashmap的应用
要满足两个条件:
1.相同的字母要替换成相同的
2.不同的字母被替换成不同的
每个字符第一次出现时作为键,替换他的字符作为值
class Solution {
public boolean isIsomorphic(String s, String t) {
//hashMap的应用
HashMap<Character,Character> map=new HashMap<>();
if (s.length()!=t.length())
return false;
int len=s.length();
for(int i=0;i<len;i++) {
if (!map.containsKey(s.charAt(i)) ) {
if(map.containsValue(t.charAt(i)))
return false;
map.put(s.charAt(i), t.charAt(i));
}
else if(map.get(s.charAt(i))!=t.charAt(i))
return false;
}
return true;
}
}
官方解法:
双映射
class Solution {
public boolean isIsomorphic(String s, String t) {
Map<Character, Character> s2t = new HashMap<Character, Character>();
Map<Character, Character> t2s = new HashMap<Character, Character>();
int len = s.length();
for (int i = 0; i < len; ++i) {
char x = s.charAt(i), y = t.charAt(i);
if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x)) {
return false;
}
s2t.put(x, y);
//HashMap.put(key,value):如果插入的 key 对应的 value 已经存在,则执行 value 替换操作,返回旧的 value 值,如果不存在则执行插入,返回 null。
t2s.put(y, x);
}
return true;
}
}