use std::collections::HashMap;
fn are_isomorphic(s: &str, t: &str) -> bool {
if s.len() != t.len() {
return false;
}
let mut map_st: HashMap<char, char> = HashMap::new();
let mut map_ts: HashMap<char, char> = HashMap::new();
for (c1, c2) in s.chars().zip(t.chars()) {
// Check mapping from s → t
if let Some(&mapped) = map_st.get(&c1) {
if mapped != c2 {
return false;
}
} else {
map_st.insert(c1, c2);
}
// Check mapping from t → s
if let Some(&mapped) = map_ts.get(&c2) {
if mapped != c1 {
return false;
}
} else {
map_ts.insert(c2, c1);
}
}
true
}
fn main() {
println!("{}", are_isomorphic("egg", "add"));
println!("{}", are_isomorphic("foo", "bar"));
println!("{}", are_isomorphic("paper", "title"));
}
/*
run:
true
false
true
*/