Find and Replace Pattern LeetCode solution in Rust

1
use std::collections::HashMap;
2
impl Solution {
3
pub fn find_and_replace_pattern(words: Vec<String>, pattern: String) -> Vec<String> {
4
let mut ret = vec![];
5

6
for word in words {
7
if Self::check(
8
&word.chars().collect::<Vec<char>>()[0..],
9
&pattern.chars().collect::<Vec<char>>()[0..],
10
) {
11
ret.push(word.clone());
12
}
13
}
14

15
ret
16
}
17

18
fn check(s: &[char], t: &[char]) -> bool {
19
let mut mp1: HashMap<char, char> = HashMap::new();
20
let mut mp2: HashMap<char, char> = HashMap::new();
21
for i in 0..s.len() {
22
let flag1 = if mp1.contains_key(&s[i]) { 1 } else { 0 };
23
let flag2 = if mp2.contains_key(&t[i]) { 1 } else { 0 };
24
if flag1 + flag2 == 1 {
25
return false;
26
}
27
if flag1 + flag2 == 2 {
28
let (mut c1, mut c2) = (' ', ' ');
29
if let Some(c) = mp1.get(&s[i]) {
30
c1 = *c;
31
}
32
if let Some(c) = mp2.get(&t[i]) {
33
c2 = *c;
34
}
35
if c1 != t[i] || c2 != s[i] {
36
return false;
37
}
38
continue;
39
}
40
mp1.insert(s[i], t[i]);
41
mp2.insert(t[i], s[i]);
42
}
43
true
44
}
45
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0