rust_test/src/main.rs

51 lines
1.4 KiB
Rust

use crate::arr::make_string_arr;
use std::cmp::max;
struct Solution;
mod arr;
impl Solution {
pub fn find_max_form(strs: Vec<String>, m: i32, n: i32) -> i32 {
let mut dp = vec![vec![0; m as usize + 1]; n as usize + 1];
fn get_count(str: &String) -> (i32, i32) {
let (mut zeros, mut ones) = (0, 0);
for c in str.chars() {
if c == '0' {
zeros += 1;
} else {
ones += 1;
}
}
(zeros, ones)
}
let mut strs = strs
.iter()
.map(|x| get_count(x))
.collect::<Vec<(i32, i32)>>();
// n1 m0
// 外1内0
for i in 0..strs.len() {
let (zeros, ones) = strs[i];
for i in (ones..=n).rev() {
for k in (zeros..=m).rev() {
dp[i as usize][k as usize] = dp[i as usize][k as usize]
.max(dp[(i - ones) as usize][(k - zeros) as usize] + 1);
}
}
}
let mut ans = 0;
dp.iter()
.for_each(|x| x.iter().for_each(|y| ans = max(ans, *y)));
ans
}
}
// dp?
fn main() {
let result = Solution::find_max_form(
make_string_arr("[\"10\", \"0001\", \"111001\", \"1\", \"0\"]"),
5,
3,
);
println!("{:?}", result);
}