专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
九章算法  ·  截图为证,这套模板简直是SD的神! ·  6 天前  
九章算法  ·  倒计时一天!九章消费券免费抢! ·  4 天前  
九章算法  ·  大龄转码一年:对女生友好,大胆冲! ·  6 天前  
九章算法  ·  《北美保offer计划》,FLAG资深面试官 ... ·  5 天前  
51好读  ›  专栏  ›  九章算法

Google 面试题 | 验证UTF-8

九章算法  · 公众号  · 算法  · 2017-01-24 08:51

正文


验证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程度,主要考察对位运算的运用。


相关Lintcode面试题

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, 或猛戳“阅读原文”