fun areIsomorphic(s: String, t: String): Boolean {
if (s.length != t.length) return false
val mapST = mutableMapOf<Char, Char>()
val mapTS = mutableMapOf<Char, Char>()
for ((c1, c2) in s.zip(t)) {
// Check mapping from s → t
if (mapST.containsKey(c1)) {
if (mapST[c1] != c2) return false
} else {
mapST[c1] = c2
}
// Check mapping from t → s
if (mapTS.containsKey(c2)) {
if (mapTS[c2] != c1) return false
} else {
mapTS[c2] = c1
}
}
return true
}
fun main() {
println(areIsomorphic("egg", "add"))
println(areIsomorphic("foo", "bar"))
println(areIsomorphic("paper", "title"))
}
/*
run:
true
false
true
*/