news 2026/6/10 8:51:16

经典算法题详解之统计重复个数(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
经典算法题详解之统计重复个数(二)

​解决方案

思路

由于题目中的 n1 和 n2 都很大,因此我们无法真正把 S1 = [s1, n1] 和 S2 = [s2, n2] 都显式地表示出来。由于这两个字符串都是不断循环的,因此我们可以考虑找出 s2 在 S1 中出现的循环节,如果我们找到了循环节,那么我们就可以很快算出 s2 在 S1 中出现了多少次了。

有些读者可能对循环节这个概念会有些陌生,这个概念我们可以类比无限循环小数,如果从小数部分的某一位起向右进行到某一位止的一节数字「循环」出现,首尾衔接,称这种小数为「无限循环小数」,这一节数字称为「无限循环小数」。比如对于 3.56789789789... 这个无限循环小数,它的小数部分就是以 789 为一个「循环节」在无限循环,且开头可能会有部分不循环的部分,这个数字中即为 56。

那么回到这题,我们可以将不断循环的 s2 组成的字符串类比作上面小数部分,去找是否存在一个子串,即「循环节」,满足不断在 S2 中循环,且这个循环节能对应固定数量的 s1 。如下图所示,在第一次出现后,S2 的子串 bdadc 构成一个循环节:之后 bdadc 的每次出现都需要有相应的两段 s1。

当我们找出循环节后,我们即可知道一个循环节内包含 s1 的数量,以及在循环节出现前的 s1 的数量,这样就可以在 O(1) 的时间内,通过简单的运算求出 s2 在 S1 中出现的次数了。当然,由于 S1 中 s1 的数量 n1 是有限的,因此可能会存在循环节最后一个部分没有完全匹配,如上图最后会单独剩一个 s1 出来无法完全匹配完循环节,这部分我们需要单独拿出来遍历处理统计。

有些读者可能会怀疑循环节是否一定存在,这里我们给出的答案是肯定的,根据鸽笼原理,我们最多只要找过 |s2| + 1 个 s1,就一定会出现循环节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 8:04:13

MIDI音乐制作实战指南:从零开始掌握专业编辑技巧

MIDI音乐制作实战指南:从零开始掌握专业编辑技巧 【免费下载链接】midieditor Provides an interface to edit, record, and play Midi data 项目地址: https://gitcode.com/gh_mirrors/mi/midieditor 当你在音乐创作中遇到这些问题时,是否感到无…

作者头像 李华
网站建设 2026/6/10 12:24:22

2、互联网中的对等网络模型发展历程

互联网中的对等网络模型发展历程 互联网作为全球数百万主机构建的共享合作网络,其资源承载着众多应用的需求。自1994年起,普通大众大量涌入互联网,这不仅给网络带宽带来了巨大压力,还因关键应用对网络的依赖催生了新的安全需求,防火墙的广泛部署将网络分割成多个部分。然而…

作者头像 李华
网站建设 2026/6/10 13:12:50

31、文件共享与匿名发布系统中的信任问题剖析

文件共享与匿名发布系统中的信任问题剖析 在当今数字化时代,文件共享和匿名发布系统变得越来越重要。然而,这些系统面临着诸多挑战,包括安全攻击、内容认证以及搜索机制的可靠性等问题。下面我们将深入探讨这些系统中的信任问题以及相应的解决方案。 1. 防止拒绝服务攻击的…

作者头像 李华
网站建设 2026/6/10 12:23:33

架构革命:组件化设计如何重塑现代软件开发边界

架构革命:组件化设计如何重塑现代软件开发边界 【免费下载链接】flame A Flutter based game engine. 项目地址: https://gitcode.com/GitHub_Trending/fl/flame 你是否曾在项目迭代中陷入"牵一发而动全身"的困境?当业务逻辑与界面表现…

作者头像 李华
网站建设 2026/6/10 12:27:05

17、数字取证中的磁盘镜像与错误处理

数字取证中的磁盘镜像与错误处理 1. 取证工具的错误处理 在数字取证过程中,磁盘可能存在错误,不同的取证工具对错误的处理和报告方式各有不同。以下是几种常见取证工具的错误处理情况: 1.1 dcfldd 当 dcfldd 工具遇到磁盘错误时,会将错误的位置(块偏移)报告到标准输出…

作者头像 李华