验证UTF-8
我们一些数据,判断这些数据是否是合法的UTF-8的编码
样例输入
Example 1:
data = [197, 130, 1], 如果用八位字节表示
11000101 10000010 00000001.
Return true.
Example 2:
data = [235, 140, 4], 如果用八位字节表示
11101011 10001100 00000100.
Return false.
此题难点在于对题意是否完全理解。那么我们先来解读一下题意。在题目里,已经给出了UTF-8的一些规则,如下:
通过这个表我们能够得到一些规律,当第一个数的前三位是110时,后一个数一定前两位是10,如果第一个数前四位是1110,那么后两个数的前两位的前两位是10……通过这个规则,我们就能够对这些数进行处理了。那么问题现在就变成了如果取判断一个数的前几位是什么,这里我们可以通过位运算去处理。
举个例子,判断一个数的前三位是否是110,那么我们可以先将这个数右移(>>)5位(题目上给出数都是至少8位),判断这个数是否等于0b10(二进制下的10)即可,同理可以判断前二位,前一位的情况。
http://www.jiuzhang.com/solutions/utf-8-validation/
这道题目能够熟练的运用位运算取出一个数的前几位才是这题的hire程度,主要考察对位运算的运用。
http://www.lintcode.com/zh-cn/problem/count-1-in-binary/
http://www.lintcode.com/zh-cn/problem/gray-code/
想进FLAG?九章帮你解决面试时常见系统设计问题
以下课程,正在报名中!
《九章算法班》
《算法强化班》
《Java入门与基础算法班》
《Big Data 项目实战班》
第一节免费试听!!
报名网址http://t.cn/RAC7Era, 或猛戳“阅读原文”