給定兩個字符串?s?和?t,判斷它們是否是同構的。
如果?s?中的字符可以被替換得到?t?,那么這兩個字符串是同構的。
所有出現的字符都必須用另一個字符替換,同時保留字符的順序。兩個字符不能映射到同一個字符上,但字符可以映射自己本身。
示例 1:
輸入: s = "egg", t = "add"
輸出: true
示例 2:
輸入: s = "foo", t = "bar"
輸出: false
示例 3:
輸入: s = "paper", t = "title"
輸出: true
說明:
你可以假設?s?和 t 具有相同的長度。
思路:見代碼:我們記住每一個s中出現的字符,和對應的t中的字符。
在之后的遍歷中,要么在s中遇到新的字符,要么符合之前的記錄。否則是false。
?然后就涼了。
后來想了一下:比如ab和aa,從s到t的角度看:a對應a,b對應a,檢查的沒毛病。
但是從t到s的角度看:a對應了a和b兩個字符,明顯不對。
所以同樣的代碼邏輯應該正著跑一遍,反著跑一遍。
class Solution {public boolean isIsomorphic(String s, String t) {return isIsomorphicHelper(s, t) && isIsomorphicHelper(t, s);}private boolean isIsomorphicHelper(String s, String t) {int n = s.length();HashMap<Character, Character> map = new HashMap<>();for (int i = 0; i < n; i++) {char c1 = s.charAt(i);char c2 = t.charAt(i);if (map.containsKey(c1)) {if (map.get(c1) != c2) {return false;}} else {map.put(c1, c2);}}return true;}
}
?
?