来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/utf-8-validation

题目描述

给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码。

UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:

对于 1 字节 的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。
对于 n 字节 的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。
这是 UTF-8 编码的工作方式:

Char. number range | 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
注意:输入是整数数组。只有每个整数的 最低 8 个有效位 用来存储数据。这意味着每个整数只表示 1 字节的数据。

示例 1:

输入:data = [197,130,1]
输出:true
解释:数据表示字节序列:11000101 10000010 00000001。
这是有效的 utf-8 编码,为一个 2 字节字符,跟着一个 1 字节字符。
示例 2:

输入:data = [235,140,4]
输出:false
解释:数据表示 8 位的序列: 11101011 10001100 00000100.
前 3 位都是 1 ,第 4 位为 0 表示它是一个 3 字节字符。
下一个字节是开头为 10 的延续字节,这是正确的。
但第二个延续字节不以 10 开头,所以是不符合规则的。

提示:

1 <= data.length <= 2 * 104
0 <= data[i] <= 255

解题思路

主要考察阅读理解。

通过读题得出不是UTF-8的情况有以下几种

1、大于4字节

2、首字节10开头

3、首字节1个数与非首字节10个数不匹配

简单模拟就好了。

源码展示

class Solution {
public:
bool validUtf8(vector<int>& data) {
for(int i = 0; i < data.size(); i++)
{
if(128 <=data[i] && data[i]< 192)
return false;
int bFlag = 128;
int iCount = -1;
while(bFlag & data[i])
{
iCount++;
bFlag = bFlag >> 1;
}
if(iCount > 3) return false;
for(int j = 0; j < iCount; j++)
{
i++;
if(i >= data.size() || data[i] < 128 || data[i] >= 192)
{
return false;
}
}
}
return true;
}
};

运行结果

最新文章

  1. java异常捕获
  2. 语言模拟ATM自动取款机系统
  3. jqm页面跳转问题
  4. 网站CSS写在html里面的好处
  5. split() 注意事项.
  6. css reset重置样式有那么重要吗?
  7. 服务端 unity
  8. gentoo装X服务器时显卡选择
  9. Morgan stanley 电话面试
  10. Memcached 搭建过程
  11. 扩展WebBrowser控件,使其支持拖放文件
  12. Qt 如何使用 QImage 设置指定的颜色为透明色?
  13. RNAseq测序reads定位
  14. 【linux总结】zsl
  15. SDWebImage源码分析
  16. children()与find()区别
  17. 【PyQt5-Qt Designer】对话框系列
  18. Centos6.5建立本地YUM源
  19. Amount of Degrees(数位dp)
  20. ld: -pie can only be used when targeting iOS 4.2 or later

热门文章

  1. 解析【.mdb】文件
  2. APP异常测试点汇总
  3. 解决MVVMLight导航VM不重置问题
  4. idea里面连接数据库进行sql操作
  5. Android录屏实现
  6. 从最简单的线性DP开始
  7. C 语言初学者必备开发工具——Dev-Cpp [ 图文安装教程 ]
  8. 毫米波雷达 TI IWR1443 初体验
  9. AJAX容易出错地方,错误处理
  10. CSS文字超出宽度---换行总结