专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
算法爱好者  ·  被公司辞退,拿到22万补偿金。结果在准备入职 ... ·  22 小时前  
算法与数据结构  ·  年薪154W!真心建议大家冲一冲新兴领域,工 ... ·  昨天  
算法爱好者  ·  再见!IBM 中国! ·  昨天  
算法爱好者  ·  普通人如何抓住 DeepSeek ... ·  昨天  
算法爱好者  ·  奔驰中国裁员赔偿 ... ·  3 天前  
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?九章帮你解决面试时常见系统设计问题







请到「今天看啥」查看全文