这篇文章是rust解决算法问题的第六篇,感兴趣的掘友可以去jibinbin 的个人主页 - 动态 - 掘金 (juejin.cn)查看其他文章,话不多说,直接进入正题。
205. 同构字符串 - 力扣(LeetCode) (leetcode-cn.com)是一道简单的问题,是我昨天晚上刷leetcode时看到的,由于昨天时间比较晚了,就只是实现了js版本解法,今天上午才实现rust版本的。
实现思路
这道题的实现思路也很简单,利用hashmap存储单词之间的对应关系,然后遍历字符串,在这个过程中,可能会出现四种情况:
- s字符映射过,但新传入t字符的不相同,返回false
- s字符映射过,并且新传入t字符的相同,继续遍历
- s字符没映射过,但需要映射的t字符已经被占用了,返回false
- s字符没映射过,新建映射
js版本
var isIsomorphic = function (s, t) {
let m = new Map();
for (let i = 0; i < s.length; i++) {
if (m.has(s[i]) && m.get(s[i]) != t[i]) {
return false;
}
if (!m.has(s[i]) && [...m.values()].includes(t[i])) {
return false;
}
if (!m.has(s[i])) {
m.set(s[i], t[i]);
}
}
return true;
};
rust版本
use std::collections::HashMap;
impl Solution {
pub fn is_isomorphic(s: String, t: String) -> bool {
let mut map:HashMap<&str,&str> = HashMap::new();
let mut i = 0;
if s.len() == 1 {
return true;
}else{
while i < s.len() {
if map.contains_key(&s[i..i+1]) && map.get(&s[i..i+1]) != Some(&&t[i..i+1]) {
return false;
}
if !map.contains_key(&s[i..i+1]) {
for item in map.values() {
if item as &str == &t[i..i+1]{
return false;
}
}
}
if !map.contains_key(&s[i..i+1]) {
map.insert(&s[i..i+1],&t[i..i+1]);
}
i += 1;
}
}
true
}
}
想要了解更多rust哈希映射的掘友可以点击HashMap in std::collections - Rust (rust-lang.org)