1871. 跳跃游戏 VII
This commit is contained in:
parent
25645920ff
commit
985c978958
51
src/main.rs
51
src/main.rs
|
|
@ -1,38 +1,39 @@
|
|||
mod arr;
|
||||
struct Solution {}
|
||||
use std::collections::HashSet;
|
||||
|
||||
impl Solution {
|
||||
pub fn longest_common_prefix(arr1: Vec<i32>, arr2: Vec<i32>) -> 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::<Vec<_>>();
|
||||
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));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue