How to check if two strings are isomorphic in Rust

2 Answers

0 votes
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

*/

 



answered Dec 19, 2025 by avibootz
0 votes
fn are_isomorphic(s: &str, t: &str) -> bool {
    if s.len() != t.len() {
        return false;
    }

    let mut map_st = [0; 256];
    let mut map_ts = [0; 256];

    for (i, (c1, c2)) in s.bytes().zip(t.bytes()).enumerate() {
        if map_st[c1 as usize] != map_ts[c2 as usize] {
            return false;
        }
        map_st[c1 as usize] = i + 1;
        map_ts[c2 as usize] = i + 1;
    }
    
    true
}


fn main() {
    println!("{}", are_isomorphic("egg", "add"));     
    println!("{}", are_isomorphic("foo", "bar"));     
    println!("{}", are_isomorphic("paper", "title")); 
}




/*
run:

true
false
true

*/

 



answered Dec 19, 2025 by avibootz
...