393. UTF-8 Validation

网友投稿 711 2022-10-09

393. UTF-8 Validation

393. UTF-8 Validation

A character in UTF8 can be from 1 to 4 bytes long, subjected to the following rules:

For 1-byte character, the first bit is a 0, followed by its unicode code. For n-bytes character, the first n-bits are all one’s, the n+1 bit is 0, followed by n-1 bytes with most significant 2 bits being 10. This is how the UTF-8 encoding would work:

| UTF-8 octet sequence (hexadecimal) | (binary) --------------------+--------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Given an array of integers representing the data, return whether it is a valid utf-8 encoding.

Note: The input is an array of integers. Only the least significant 8 bits of each integer is used to store the data. This means each integer represents only 1 byte of data.

Example 1:

data = [197, 130, 1], which represents the octet sequence: 11000101 10000010 00000001.Return true.It is a valid utf-8 encoding for a 2-bytes character followed by a 1-byte character.

Example 2:

data = [235, 140, 4], which represented the octet sequence: 11101011 10001100 00000100.Return false.The first 3 bits are all one's and the 4th bit is 0 means it is a 3-bytes character.The next byte is a continuation byte which starts with 10 and that's correct.But the second continuation byte does not start with 10, so it is

思路: 一个loop,每次分三步来做,loop invariant是每次data[i]都是first byte of 新的character 1、统计data[i]后8位里面,从前开始有多少个1,用变量ones来保存,其中ones可能的值只有0, 2, 3, 4 2、从 data[i+1] 开始检查,后八位中的前两位是否为’10’,一共检查ones - 1 3、更新i的值为 i + ones

class Solution { public boolean validUtf8(int[] data) { int i = 0; while(i < data.length) { int ones = 0; while(((data[i] >> (7 - ones)) & 1) == 1) { ones++; } if(ones == 1 || ones > 4) return false; i++; while(ones-- > 1) { if(i >= data.length || ((data[i] >> 6) & 3) != 2) return false; i++; } } return true; }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:310. Minimum Height Trees
下一篇:云开发·头像合成小程序,可以用于在小程序端生成包含不同边框的头像
相关文章

 发表评论

暂时没有评论,来抢沙发吧~