393. UTF-8 编码验证

exiaohu 于 2022-03-13 发布

题目链接:393. UTF-8 编码验证

按照规则判断即可。

class Solution:
    @staticmethod
    def sizeof(datum: int) -> int:
        if 0 <= datum <= 127:
            return 1
        elif 128 <= datum <= 191:
            return -1  # is post-sequence
        elif 192 <= datum <= 223:
            return 2
        elif 224 <= datum <= 239:
            return 3
        elif 240 <= datum <= 247:
            return 4
        else:
            raise ValueError("malformed data")

    def validUtf8(self, data: List[int]) -> bool:
        try:
            i = 0
            while i < len(data):
                s = self.sizeof(data[i])
                if s > 0:
                    for j in range(i + 1, i + s):
                        if j >= len(data) or self.sizeof(data[j]) != -1:
                            return False
                    i += s
                else:
                    return False

            return i == len(data)
        except ValueError:
            return False