当前位置: 首页 > article >正文

Java | Leetcode Java题解之第393题UTF-8编码验证

题目:

题解:

class Solution {
    static final int MASK1 = 1 << 7;
    static final int MASK2 = (1 << 7) + (1 << 6);

    public boolean validUtf8(int[] data) {
        int m = data.length;
        int index = 0;
        while (index < m) {
            int num = data[index];
            int n = getBytes(num);
            if (n < 0 || index + n > m) {
                return false;
            }
            for (int i = 1; i < n; i++) {
                if (!isValid(data[index + i])) {
                    return false;
                }
            }
            index += n;
        }
        return true;
    }

    public int getBytes(int num) {
        if ((num & MASK1) == 0) {
            return 1;
        }
        int n = 0;
        int mask = MASK1;
        while ((num & mask) != 0) {
            n++;
            if (n > 4) {
                return -1;
            }
            mask >>= 1;
        }
        return n >= 2 ? n : -1;
    }

    public boolean isValid(int num) {
        return (num & MASK2) == MASK1;
    }
}

http://www.kler.cn/a/291442.html

相关文章:

  • leetCode刷题-图、回溯相关
  • UE求职Demo开发日志#23 线性任务系统数据层实现
  • 实名制-网络平台集成身份证实名认证接口/身份证查询-PHP
  • Verilog基础(一):基础元素
  • 洛谷网站: P3029 [USACO11NOV] Cow Lineup S 题解
  • ollama部署deepseek实操记录
  • 传递给 LEFT 或 SUBSTRING 函数的长度参数无效
  • 输送线相机拍照信号触发(博途PLC高速计数器中断立即输出应用)
  • k8s - Volume 简介和HostPath的使用
  • 光电红外传感器详解(STM32)
  • web群集--nginx常见的几种负载均衡调度算法的配置过程和效果展示
  • ~/.bashrc、 ~/.bash_profile、~/.profile、 /etc/profile几个配置文件的区别
  • 亚马逊卖家测评为什么要自己养账号呢?不懂快进来看看
  • 计算机二级真题--程序设计大题 章节
  • 【多线程】方法中定义的局部变量是否为线程安全的?
  • 适用于 Visual Studio 的 C++ 万能头
  • Hadoop运行jps没有datanode节点【已解决】
  • 常用的限流算法-令牌桶(Token Bucket)php版
  • Python将Latex公式插入到Word中
  • leetcode回文链表
  • 【动态规划-背包问题】
  • 黑马程序员Python数据挖掘|1Jupyter Notebook的使用
  • Spring介绍和Log4j2
  • Flask的上下文管理流程
  • 探索前沿科技:在本地系统上安装和使用Style TTS2进行高质量语音合成
  • 交换机堆叠配置