Hint UTF-8 ranges between 1 to 4 bytes (8-bits).
Runtime: O(n)
class Solution {
public boolean validUtf8(int[] data) {
int n = data.length;
int skip = 0b10000000;
int check = 0;
for (int currByte: data) {
if (check > 0) {
if ((currByte & skip) == skip)
check--;
else
return false;
} else {
check = getHeadType(currByte);
if (check < 0) return false;
}
}
return check == 0;
}
public int getHeadType(int num) {
if ((num & 0b11110000) == 0b11110000 && (num & 0b00001000) != 0b00001000) return 3;
if ((num & 0b11100000) == 0b11100000 && (num & 0b00010000) != 0b00010000) return 2;
if ((num & 0b11000000) == 0b11000000 && (num & 0b00100000) != 0b00100000) return 1;
if ((num & 0b10000000) == 0b10000000) return -1; //error
return 0;
}
}