1888. 使二进制字符串字符交替的最少反转次数
This commit is contained in:
parent
566c6a8414
commit
c18ad8c1b0
61
src/main.rs
61
src/main.rs
|
|
@ -3,37 +3,60 @@ use std::cmp::min;
|
|||
struct Solution;
|
||||
mod arr;
|
||||
impl Solution {
|
||||
pub fn min_operations(s: String) -> i32 {
|
||||
let (mut cnt_a, mut cnt_b) = (0, 0);
|
||||
let mut cnt = 0;
|
||||
pub fn min_flips(s: String) -> i32 {
|
||||
let mut len = s.len();
|
||||
let (mut even_zero, mut even_one, mut odd_zero, mut odd_one) = (0, 0, 0, 0);
|
||||
//let s = (s.clone() + &s).chars().collect::<Vec<_>>();
|
||||
let mut ans = 1e6 as i32;
|
||||
let mut is_even = true;
|
||||
|
||||
for c in s.chars() {
|
||||
if cnt & 1 == 1 {
|
||||
if is_even {
|
||||
is_even = false;
|
||||
if c == '0' {
|
||||
cnt_a += 1;
|
||||
even_zero += 1;
|
||||
} else {
|
||||
cnt_b += 1;
|
||||
even_one += 1;
|
||||
}
|
||||
} else {
|
||||
is_even = true;
|
||||
if c == '0' {
|
||||
odd_zero += 1;
|
||||
} else {
|
||||
odd_one += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
for c in s.chars() {
|
||||
ans = min(ans, min(odd_zero + even_one, odd_one + even_zero));
|
||||
if len & 1 == 1 {
|
||||
if c == '0' {
|
||||
odd_zero += 1;
|
||||
} else {
|
||||
odd_one += 1;
|
||||
}
|
||||
} else {
|
||||
if c == '0' {
|
||||
cnt_b += 1;
|
||||
even_zero += 1;
|
||||
} else {
|
||||
cnt_a += 1;
|
||||
even_one += 1;
|
||||
}
|
||||
}
|
||||
cnt += 1;
|
||||
(even_zero, even_one, odd_zero, odd_one) = (odd_zero, odd_one, even_zero, even_one);
|
||||
if c == '0' {
|
||||
odd_zero -= 1;
|
||||
} else {
|
||||
odd_one -= 1;
|
||||
}
|
||||
min(cnt_a, cnt_b)
|
||||
}
|
||||
ans
|
||||
}
|
||||
}
|
||||
|
||||
// 111000 o0 1 o1 2 j0 2 j1 1
|
||||
// 1110001 o0 1 o1 3 j0 2 j1 1
|
||||
// 1110001 o0 2 o1 1 j0 1 j1 3
|
||||
// 110001 2 1 1 2
|
||||
fn main() {
|
||||
let result = Solution::min_operations("1111".to_string());
|
||||
let result = Solution::min_flips("111000".to_string());
|
||||
println!("{:?}", result);
|
||||
}
|
||||
// [[0,0,0,0,0,0],
|
||||
// [0,0,1,0,0,0],
|
||||
// [0,0,0,0,1,0],
|
||||
// [0,0,0,0,0,0],
|
||||
// [0,0,1,0,0,1],
|
||||
// [0,0,0,0,0,0],
|
||||
// [0,0,0,0,0,0]]
|
||||
|
|
|
|||
Loading…
Reference in New Issue