1871. 跳跃游戏 VII

This commit is contained in:
li_chx 2026-05-25 09:55:22 +08:00
parent 25645920ff
commit 985c978958
Signed by: li_chx
GPG Key ID: C7CF27EFA1E58BAC
1 changed files with 26 additions and 25 deletions

View File

@ -1,38 +1,39 @@
mod arr; mod arr;
struct Solution {} struct Solution {}
use std::collections::HashSet;
impl Solution { impl Solution {
pub fn longest_common_prefix(arr1: Vec<i32>, arr2: Vec<i32>) -> i32 { pub fn can_reach(s: String, min_jump: i32, max_jump: i32) -> bool {
let mut map = HashSet::new(); let arr = s
for &x in &arr1 { .chars()
let mut x = x; .enumerate()
while x > 0 { .filter_map(|c| if c.1 == '0' { Some(c.0)} else { None })
map.insert(x); .collect::<Vec<_>>();
x /= 10; if arr[arr.len() - 1] != s.len() - 1 {
return false;
} }
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 get_length = |x : i32| -> i32 { let start = arr[i] + min_jump as usize;
x.to_string().len() as i32 let end = arr[i] + max_jump as usize;
}; for j in last_can_reach + 1..arr.len() {
let mut max_length = 0; if arr[j] < start {
for &x in &arr2 { continue;
let mut x = x; }
while x > 0 { if arr[j] > end {
if map.contains(&x) {
max_length = max_length.max(get_length(x));
break; break;
} }
x /= 10; can_reach[j] = true;
last_can_reach = j;
} }
} }
max_length can_reach[arr.len() - 1]
} }
} }
fn main() { fn main() {
println!( println!("{:?}", Solution::can_reach(String::from("0110110"), 2, 3));
"{:?}",
Solution::longest_common_prefix(vec![1, 10, 100], vec![1000])
);
} }