LeetCode 393. UTF-8 编码验证
原题链接
中等
class Solution {
private boolean startWith(int prefix, int value, int shift) {
return (value >> shift) == prefix;
}
public boolean validUtf8(int[] data) {
int n = data.length;
int k = 0;
while(k < n) {
if(startWith(0b0, data[k], 7)) k ++;
else if(startWith(0b110, data[k], 5)) {
k ++;
if(k >= n || !startWith(0b10, data[k], 6))
return false;
else k ++;
} else if(startWith(0b1110, data[k], 4)) {
k ++;
for(int i = 0; i < 2; i ++) {
if(k >= n || !startWith(0b10, data[k], 6))
return false;
else k++;
}
} else if(startWith(0b11110, data[k], 3)) {
k ++;
for(int i = 0; i < 3; i ++) {
if(k >= n || !startWith(0b10, data[k], 6))
return false;
else k ++;
}
} else return false;
}
return true;
}
}