From 985c9789583a45045965a0ebc62a237adcd0f92a Mon Sep 17 00:00:00 2001 From: li_chx Date: Mon, 25 May 2026 09:55:22 +0800 Subject: [PATCH] =?UTF-8?q?1871.=20=E8=B7=B3=E8=B7=83=E6=B8=B8=E6=88=8F=20?= =?UTF-8?q?VII?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9ff8cbd..e93eae4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,38 +1,39 @@ mod arr; struct Solution {} -use std::collections::HashSet; - impl Solution { - pub fn longest_common_prefix(arr1: Vec, arr2: Vec) -> i32 { - let mut map = HashSet::new(); - for &x in &arr1 { - let mut x = x; - while x > 0 { - map.insert(x); - x /= 10; - } + pub fn can_reach(s: String, min_jump: i32, max_jump: i32) -> bool { + let arr = s + .chars() + .enumerate() + .filter_map(|c| if c.1 == '0' { Some(c.0)} else { None }) + .collect::>(); + if arr[arr.len() - 1] != s.len() - 1 { + return false; } - let get_length = |x : i32| -> i32 { - x.to_string().len() as i32 - }; - let mut max_length = 0; - for &x in &arr2 { - let mut x = x; - while x > 0 { - if map.contains(&x) { - max_length = max_length.max(get_length(x)); + let mut can_reach = vec![false; arr.len()]; + can_reach[0] = true; + let mut last_can_reach = 0; + for i in 0..arr.len() { + if !can_reach[i] { + continue; + } + let start = arr[i] + min_jump as usize; + let end = arr[i] + max_jump as usize; + for j in last_can_reach + 1..arr.len() { + if arr[j] < start { + continue; + } + if arr[j] > end { break; } - x /= 10; + can_reach[j] = true; + last_can_reach = j; } } - max_length + can_reach[arr.len() - 1] } } fn main() { - println!( - "{:?}", - Solution::longest_common_prefix(vec![1, 10, 100], vec![1000]) - ); + println!("{:?}", Solution::can_reach(String::from("0110110"), 2, 3)); }