难度:简单
题目描述:给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
分析
本题主要判断两个字符串s和t是否为同构,同构简单的解释一下就是两个字符串的组成形式是否一致,例如s=egg,t=add
,s为ABB形式组成的字符串,t也是为ABB形式组成的字符串。
清楚了什么是同构,就可以把问题简化成字符串s的组成形式和字符串t的组成形式之间的比较,也即ABB的比较,为了方便比较建议换成数字进行比较。
解题
class Solution {
public boolean isIsomorphic(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] sInts = intsToStrings(s);
int[] tInts = intsToStrings(t);
for (int i = 0; i < s.length(); i++) {
if (sInts[i] != tInts[i]) return false;
}
return true;
}
private int[] intsToStrings(String s) {
Map<Character, Integer> maps = new HashMap<>();
int[] result = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
if (maps.containsKey(s.charAt(i))) {
result[i] = maps.get(s.charAt(i));
} else {
maps.put(s.charAt(i), maps.size() + 1);
result[i] = maps.get(s.charAt(i));
}
}
return result;
}
intsToStrings()方法主要将字符串转换成数字表示的形式数组。