题目
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
维护两张hash表
可以直接用字符的ascii码作为hash码(数组下标)
两个数组(c1[],c2[])分别维护两个字符串对另一个字符串的映射关系, 下标为key,值为value
如果映射关系唯一,如字符串s中一个字符a对应了字符串t中的b,则c1[a]==c2[b]为true
也就是s中的a的数量和b的数量应该是相等的,一旦不等则返回false
class Solution {
public boolean isIsomorphic(String s, String t) {
char[] chars = s.toCharArray();
char[] chart = t.toCharArray();
int[] preIndexOfs = new int[256];
int[] preIndexOft = new int[256];
for (int i = 0; i < chars.length; i++) {
if (preIndexOfs[chars[i]] != preIndexOft[chart[i]]) {
return false;
}
preIndexOfs[chars[i]] = i + 1;
preIndexOft[chart[i]] = i + 1;
}
return true;
}
}