package main
import (
"fmt"
)
func areIsomorphic(s, t string) bool {
if len(s) != len(t) {
return false
}
mapST := make(map[rune]rune)
mapTS := make(map[rune]rune)
for i, c1 := range s {
c2 := rune(t[i])
// Check mapping from s → t
if mapped, ok := mapST[c1]; ok {
if mapped != c2 {
return false
}
} else {
mapST[c1] = c2
}
// Check mapping from t → s
if mapped, ok := mapTS[c2]; ok {
if mapped != c1 {
return false
}
} else {
mapTS[c2] = c1
}
}
return true
}
func main() {
fmt.Println(areIsomorphic("egg", "add"))
fmt.Println(areIsomorphic("foo", "bar"))
fmt.Println(areIsomorphic("paper", "title"))
}
/*
run:
true
false
true
*/