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