UTF-8 Validation

medium array bit manipulation

Problem

Given an integer array data where each element represents one byte (only the lowest 8 bits matter), return true if it is a valid UTF-8 encoding. UTF-8 rules: a leading byte is 0xxxxxxx (1-byte), 110xxxxx (2-byte), 1110xxxx (3-byte), or 11110xxx (4-byte); every continuation byte must be 10xxxxxx.

Inputdata = [197, 130, 1]
Outputtrue
197 = 11000101 (start of 2-byte), 130 = 10000010 (continuation), 1 = 00000001 (1-byte).

def valid_utf8(data):
    cont = 0
    for b in data:
        if cont == 0:
            if   (b >> 7) == 0:    cont = 0
            elif (b >> 5) == 0b110:  cont = 1
            elif (b >> 4) == 0b1110: cont = 2
            elif (b >> 3) == 0b11110:cont = 3
            else: return False
        else:
            if (b >> 6) != 0b10: return False
            cont -= 1
    return cont == 0
function validUtf8(data) {
  let cont = 0;
  for (const b of data) {
    if (cont === 0) {
      if      ((b >> 7) === 0)      cont = 0;
      else if ((b >> 5) === 0b110)   cont = 1;
      else if ((b >> 4) === 0b1110)  cont = 2;
      else if ((b >> 3) === 0b11110) cont = 3;
      else return false;
    } else {
      if ((b >> 6) !== 0b10) return false;
      cont--;
    }
  }
  return cont === 0;
}
class Solution {
    public boolean validUtf8(int[] data) {
        int cont = 0;
        for (int b : data) {
            if (cont == 0) {
                if      ((b >> 7) == 0)       cont = 0;
                else if ((b >> 5) == 0b110)   cont = 1;
                else if ((b >> 4) == 0b1110)  cont = 2;
                else if ((b >> 3) == 0b11110) cont = 3;
                else return false;
            } else {
                if ((b >> 6) != 0b10) return false;
                cont--;
            }
        }
        return cont == 0;
    }
}
bool validUtf8(vector<int>& data) {
    int cont = 0;
    for (int b : data) {
        if (cont == 0) {
            if      ((b >> 7) == 0)       cont = 0;
            else if ((b >> 5) == 0b110)   cont = 1;
            else if ((b >> 4) == 0b1110)  cont = 2;
            else if ((b >> 3) == 0b11110) cont = 3;
            else return false;
        } else {
            if ((b >> 6) != 0b10) return false;
            cont--;
        }
    }
    return cont == 0;
}
Time: O(n) Space: O(1)