2515. 到目标字符串的最短距离
This commit is contained in:
parent
023fe9ec14
commit
671347dfde
52
src/main.rs
52
src/main.rs
|
|
@ -1,47 +1,39 @@
|
||||||
|
use crate::arr::make_string_arr;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
mod arr;
|
mod arr;
|
||||||
|
|
||||||
struct Solution {}
|
struct Solution {}
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn solve_queries(nums: Vec<i32>, queries: Vec<i32>) -> Vec<i32> {
|
pub fn closest_target(words: Vec<String>, target: String, start_index: i32) -> i32 {
|
||||||
let mut mp = HashMap::<i32, Vec<usize>>::new();
|
let n = words.len();
|
||||||
let n = nums.len() as i32;
|
let map = words.into_iter().enumerate().fold(
|
||||||
let mut queries = queries;
|
HashMap::<String, Vec<usize>>::new(),
|
||||||
for i in 0..nums.len() {
|
|mut acc, (i, word)| {
|
||||||
if mp.contains_key(&nums[i]) {
|
acc.entry(word).or_default().push(i);
|
||||||
mp.get_mut(&nums[i]).unwrap().push(i);
|
acc
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if map.contains_key(&target) {
|
||||||
|
let arr = map.get(&target).unwrap();
|
||||||
|
let idx = arr.partition_point(|&x| x < start_index as usize);
|
||||||
|
let a = arr[idx % arr.len()].abs_diff(start_index as usize);
|
||||||
|
let b = arr[(idx + arr.len() - 1) % arr.len()].abs_diff(start_index as usize);
|
||||||
|
a.min(n - a).min(b).min(n - b) as i32
|
||||||
} else {
|
} else {
|
||||||
mp.insert(nums[i], vec![i]);
|
-1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for i in 0..queries.len() {
|
|
||||||
let arr = mp.get(&nums[queries[i] as usize]).unwrap();
|
|
||||||
if arr.len() == 1 {
|
|
||||||
queries[i] = -1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let idx = arr.partition_point(|&x| x <= queries[i] as usize);
|
|
||||||
if arr.len() == 2 {
|
|
||||||
queries[i] = (arr[idx % arr.len()] as i32).abs_diff(queries[i]) as i32;
|
|
||||||
queries[i] = queries[i].min(n - queries[i]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let mut a = arr[idx % arr.len()].abs_diff(queries[i] as usize) as i32;
|
|
||||||
let mut b = arr[(idx + arr.len() - 2) % arr.len()].abs_diff(queries[i] as usize) as i32;
|
|
||||||
a = a.min(n - a);
|
|
||||||
b = b.min(n - b);
|
|
||||||
queries[i] = a.min(b);
|
|
||||||
}
|
|
||||||
queries
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!(
|
println!(
|
||||||
"{:?}",
|
"{:?}",
|
||||||
Solution::solve_queries(vec![12, 19, 12, 8, 12, 10], vec![0, 5, 3, 1])
|
Solution::closest_target(
|
||||||
|
make_string_arr(r#"["hello","i","am","leetcode","hello"]"#),
|
||||||
|
"hello".to_string(),
|
||||||
|
1
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue