zoukankan      html  css  js  c++  java
  • leetcode393

     1 class Solution:
     2     def validUtf8(self, data):
     3         # 标记这个字节是某个编码的第几个字节
     4         n_bytes = 0
     5 
     6         # 遍历数组
     7         for num in data:
     8 
     9             # 获取二进制编码,保留最低8位
    10             bin_rep = format(num, '#010b')[-8:]
    11             # 这是一个新的UTF-8编码的第一个字节
    12             if n_bytes == 0:
    13 
    14                 # 计算前导1的个数
    15                 for bit in bin_rep:
    16                     if bit == '0': break
    17                     n_bytes += 1
    18 
    19                 # 没有前导1,则表示是一个单子节的UTF-8编码
    20                 if n_bytes == 0:#单子节只需要第一位是0即可
    21                     continue
    22 
    23                 # 如果前导1,只有1位,或者超过4位,都是非法格式
    24                 if n_bytes == 1 or n_bytes > 4:
    25                     return False
    26             else:
    27                 # 这是某个UTF-8编码的非第一子节的表示
    28                 # 必须是 `10xxxxxx` 的格式,即第0位必须是1,第1位必须是0
    29                 if not (bin_rep[0] == '1' and bin_rep[1] == '0'):
    30                     return False
    31 
    32             # 当前UTF-8编码内容,已经完成了1个字节的判断,长度-1
    33             n_bytes -= 1
    34 
    35         # 数组中所有内容都验证是合法的,没有未验证的字节了。
    36         return n_bytes == 0

    算法思路:字符串判断。

    参考:https://leetcode-cn.com/problems/utf-8-validation/solution/utf-8-bian-ma-yan-zheng-by-leetcode/

    已将参考链接里的英文注释,按照我自己的理解,翻译成中文。

  • 相关阅读:
    C++
    复盘-2018.6.8~2020.6.8
    C++
    C++
    C++
    C++
    Python学习笔记(十)- 面向对象(一)
    SSHException: Error reading SSH protocol banner
    docker 安装mysql
    docker 安装部署
  • 原文地址:https://www.cnblogs.com/asenyang/p/12665226.html
Copyright © 2011-2022 走看看