impl Solution { fncompute_frequency(s: &String) ->i32 { letmut min_char = std::i32::MAX; letmut ans = 0; for c in s.chars() { if (c asi32) < min_char { min_char = c asi32; } } for i in0..s.len() { if s.bytes().nth(i).unwrap() asi32 == min_char { ans += 1; } } return ans; }
pubfnnum_smaller_by_frequency(queries: Vec<String>, words: Vec<String>) -> Vec<i32> { let (mut ans, mut cnt) = (vec![], vec![0; 11]); for w in &words { letmut i = Self::compute_frequency(w) - 1; while i >= 0 { cnt[i asusize] += 1; i -= 1; } } for q in &queries { let val = Self::compute_frequency(q); ans.push(cnt[val asusize]); } return ans; } }
impl Solution { fnget_pos(indices: &Vec<i32>, target: i32) ->usize { let size = indices.len(); let index = match indices.binary_search(&target) { Ok(i) => i, Err(i) => i, };
if index == 0 { return indices[0] asusize; } if index == size { return indices[size - 1] asusize; } if indices[index] - target < target - indices[index - 1] { return indices[index] asusize; } else { return indices[index - 1] asusize; } }
pubfnshortest_distance_color(colors: Vec<i32>, queries: Vec<Vec<i32>>) -> Vec<i32> { letmut map : HashMap<i32, Vec<i32>> = HashMap::new(); letmut res = vec![]; for i in0..colors.len() { let color = colors[i]; if !map.contains_key(&color) { map.insert(color, vec![i asi32]); } else { letmut val = (*map.get(&color).unwrap()).clone(); val.push(i asi32); map.insert(color, val); } }
for q in queries { let target = q[0]; if !map.contains_key(&q[1]) { res.push(-1); continue; } let pos = Self::get_pos(map.get(&q[1]).unwrap(), target); res.push((pos asi32 - target).abs()); }