【每日一题Day369】LC187重复的DNA序列 | 字符串哈希

简介: 【每日一题Day369】LC187重复的DNA序列 | 字符串哈希

重复的DNA序列【LC187】

DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G''T'.。

  • 例如,"ACGAATTCCG" 是一个 DNA序列
  • 在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

  • 思路计算每个长度为10的子字符串的字符串哈希编码值,当遇到相同的哈希编码值时,将该字符串放入结果集中
  • 注意:不严谨,未判断长度是否相同
  • 实现

字符串哈希的「构造 数组」和「计算哈希」的过程,不会溢出吗?

会溢出,溢出就会变为负数,当且仅当两个哈希值溢出程度与 Integer.MAX_VALUE 呈**不同【相同?】**的倍数关系时,会产生错误结果(哈希冲突),此时考虑修改 或者采用表示范围更大的 long 来代替 int。->不取余也是可以的

  • 溢出1->Integer.MIN_VALUE:-2147483648
class Solution {
    // private final static long MOD = 1000000007;
    public List<String> findRepeatedDnaSequences(String s) {
        int n = s.length();
        int base = 7;
        int[] h = new int[n + 1];
        int[] p = new int[n + 1];
        p[0] = 1;
        Map<Integer, Integer> count = new HashMap<>();
        List<String> res = new ArrayList<>();
        for (int i = 1; i <= n; i++){
            h[i] = h[i - 1] * base + s.charAt(i - 1);
            p[i] = p[i - 1] * base;
        }
        for (int i = 0; i <= n - 10; i++){
            int code = hash(h, p, i, i + 10 - 1);
            int cnt = count.getOrDefault(code, 0);
            if (cnt == 1){
                res.add(s.substring(i, i + 10));
            }
            count.put(code, cnt + 1);
        }
        return res;
    }
    private int hash(int[] h, int[] p, int l, int r){
        return h[r + 1] - h[l] * p[r - l + 1];
    }
}

image.png

目录
相关文章
|
SQL 关系型数据库 MySQL
MySQL 聚合函数深入讲解与实战演练
MySQL 聚合函数深入讲解与实战演练
|
11月前
|
NoSQL 安全 Linux
MongoDB PHP 扩展
10月更文挑战第19天
99 0
MongoDB PHP 扩展
|
网络协议 Ubuntu Linux
VSCode使用Remote SSH远程连接Linux服务器【远程开发】
VSCode使用Remote SSH远程连接Linux服务器【远程开发】
|
存储 算法 Serverless
C++中求根号
C++中求根号
2491 0
|
Shell Linux 编译器
10个基于Linux内核开源项目,你了解几个?(上)
10个基于Linux内核开源项目,你了解几个?
|
算法 Cloud Native
【刷题日记】875. 爱吃香蕉的珂珂
本次刷题日记的第 57 篇,力扣题为:875. 爱吃香蕉的珂珂,中等
256 0
【刷题日记】875. 爱吃香蕉的珂珂
|
jenkins Java 应用服务中间件
【CI/CD技术专题】「Jenkins实战系列」总结归纳Jenkins的安装使用和配置流程介绍
【CI/CD技术专题】「Jenkins实战系列」总结归纳Jenkins的安装使用和配置流程介绍
449 0
【CI/CD技术专题】「Jenkins实战系列」总结归纳Jenkins的安装使用和配置流程介绍
|
存储 人工智能 编解码
视频图像分析研究现状
智能视频分析技术指计算机图像视觉分析技术,是人工智能研究的一个分支,它在图像及图像描述之间建立映射关系,从而使计算机能够通过数字图像处理和分析来理解视频画面中的内容。智能视频分析技术涉及到模式识别、机器视觉、人工智能、网络通信以及海量数据管理等技术。视频智能分析通常可以分为几部分:运动目标的识别、目标跟踪与行为理解。
1222 0
|
3天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1101 0
|
2天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
461 9