難度:簡(jiǎn)單
題目描述:給定兩個(gè)字符串 s 和 t,判斷它們是否是同構(gòu)的站宗。如果 s 中的字符可以按某種映射關(guān)系替換得到 t 闸准,那么這兩個(gè)字符串是同構(gòu)的。每個(gè)出現(xiàn)的字符都應(yīng)當(dāng)映射到另一個(gè)字符梢灭,同時(shí)不改變字符的順序夷家。不同字符不能映射到同一個(gè)字符上,相同字符只能映射到同一個(gè)字符上敏释,字符可以映射到自己本身库快。
分析
本題主要判斷兩個(gè)字符串s和t是否為同構(gòu),同構(gòu)簡(jiǎn)單的解釋一下就是兩個(gè)字符串的組成形式是否一致钥顽,例如s=egg,t=add
义屏,s為ABB形式組成的字符串,t也是為ABB形式組成的字符串蜂大。
清楚了什么是同構(gòu)闽铐,就可以把問(wèn)題簡(jiǎn)化成字符串s的組成形式和字符串t的組成形式之間的比較,也即ABB的比較奶浦,為了方便比較建議換成數(shù)字進(jìn)行比較兄墅。
解題
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()方法主要將字符串轉(zhuǎn)換成數(shù)字表示的形式數(shù)組。