0717 - 1-bit and 2-bit Characters
problem
We have two special characters:
- The first character can be represented by one bit
0. - The second character can be represented by two bits (
10or11).
Given a binary array bits that ends with 0, return true if the last character must be a one-bit character.
Example 1:
Input: bits = [1,0,0] Output: true Explanation: The only way to decode it is two-bit character and one-bit character. So the last character is one-bit character.
Example 2:
Input: bits = [1,1,1,0] Output: false Explanation: The only way to decode it is two-bit character and two-bit character. So the last character is not one-bit character.
Constraints:
1 <= bits.length <= 1000bits[i]is either0or1.
submission
impl Solution {
pub fn is_one_bit_character(bits: Vec<i32>) -> bool {
// solution count 1s from the right end
bits.into_iter()
.rev()
.skip(1)
.take_while(|&b| b == 1)
.count() % 2 == 0
// my original solution with state machine
// enum State {
// None,
// Current2Bit,
// Last1Bit,
// Last2Bit,
// }
// matches!(
// bits.into_iter()
// .fold(State::None, |s, v| match (s, v) {
// (State::Current2Bit, _) => State::Last2Bit,
// (_, 0) => State::Last1Bit,
// _ => State::Current2Bit,
// }),
// State::Last1Bit
// )
}
}