Leetcode 3008. Find Beautiful Indices in the Given Array II

  • Leetcode 3008. Find Beautiful Indices in the Given Array II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3008. Find Beautiful Indices in the Given Array II

1. 解题思路

这一题其实算是套路题了,知道的话就挺快的,不知道的话就会很难了……

思路上来说的话其实很直接,就是首先获取原始的字符串s当中所有的子串a和子串b出现的位置数组loc_a和loc_b,然后对比两个数组,找到所有loc_a当中的元素,使得loc_b当中存在某一元素与其距离的绝对值不大于k。

首先我们考察第二部分的问题,这个的话我们对于两个有序数组,使用滑动窗口就能在 O ( N ) O(N) O(N)的时间复杂度内处理了,并不复杂,注意一下滑动窗口的移动条件就行了,这里就不过多展开了。

剩下的,就是第一部分的问题,如何在一个字符串s当中获取所有的子串sub出现的位置。

这个问题其实蛮难的,自己想的话估计能想死人,不过现在已经是个套路题了,用z算法就能够直接搞定了,我之前也写过一个博客(经典算法:Z算法(z algorithm))介绍过这个算法,里面有个例子一模一样,直接复制里面的代码来用就行了。如果觉得我写的不好的话也可以自己去wiki或者知乎搜搜,挺多的……

2. 代码实现

给出python代码实现如下:

def z_algorithm(s):n = len(s)z = [0 for _ in range(n)]l, r = -1, -1for i in range(1, n):if i > r:l, r = i, iwhile r < n and s[r-l] == s[r]:r += 1z[i] = r-lr -= 1else:k = i - lif z[k] < r - i + 1:z[i] = z[k]else:l = iwhile r < n and s[r-l] == s[r]:r += 1z[i] = r-lr -= 1z[0] = nreturn zclass Solution:def beautifulIndices(self, s: str, a: str, b: str, k: int) -> List[int]:def find_all(s, sub):z = z_algorithm(sub+s)n, m = len(s), len(sub)z = z[m:]return [idx for idx, l in enumerate(z) if l >= m]alist = find_all(s, a)blist = find_all(s, b)ans = []i, j, n = 0, 0, len(blist)for idx in alist:while i < n and blist[i] < idx-k:i += 1while j < n and blist[j] <= idx+k:j += 1if j-i>0:ans.append(idx)return ans

提交代码评测得到:耗时1619ms,占用内存65MB。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

isis实验

根据要求制作大概&#xff1a; 使用isis配置路由器&#xff1a; 配置好物理接口地址后配置isis 为实现r1访问r5的环回走r6,需要在r6上制作路由泄露&#xff1a; 在r5上产生r1的路由明细&#xff1a; 全网可达&#xff1a;

华为 HarmonyOS 页面跳转

HarmonyOS 页面跳转 1.新建页面2.添加跳转方法3.实现跳转效果 1.新建页面 我们新建2个页面(page)&#xff0c;一个Hello World页面&#xff0c;一个Hello HarmonyOS页面&#xff0c;注意修改红色框内容&#xff0c;保持一致 2.添加跳转方法 导入导入router模块&#xff0c;页…

Rust-内存安全

堆和栈 一个进程在执行的时候&#xff0c;它所占用的内存的虚拟地址空间一般被分割成好几个区域&#xff0c;我们称为“段”(Segment)。常见的几个段如下。 代码段。编译后的机器码存在的区域。一般这个段是只读的。bss段。存放未初始化的全局变量和静态变量的区域。数据段。…

MATLAB Deep learning

文章目录 Chapter 1: Machine Learning存在的问题过拟合Overfitting解决过拟合 regularization and validationregularization 正则化validation 验证 机器学习的类型有监督学习分类Classification回归Regression 无监督学习聚类 强化学习 Chapter 2: Neural NetworkChapter 3:…

(BUUCTF)ycb_2020_easy_heap (glibc2.31的off-by-null + orw)

文章目录 前置知识整体思路高版本的off-by-nullorw exp 前置知识 未初始化内存导致的地址泄露 高版本下的off-by-null利用 glibc2.31下的orw做法 整体思路 非常综合的一道题目&#xff0c;和ciscn之前做过的一道silverwolf很相似&#xff0c;本道题目的glibc2.31的环境也让…

如何使用設置靜態住宅IP

靜態住宅IP就是一種靜態的、分配給住宅用戶的IP地址。與動態IP地址不同&#xff0c;靜態住宅IP一旦分配給用戶&#xff0c;就會一直保持不變&#xff0c;除非ISP&#xff08;Internet Service Provider&#xff0c;互聯網服務提供商&#xff09;進行手動更改。那麼&#xff0c;…

Django教程第6章 | web开发实战-文件上传(导入文件、上传图片)

专栏系列&#xff1a;Django学习教程 导入文件 目标&#xff1a;导入部门清单excel&#xff0c;解析excel数据存储到数据库。 1.准备要导入的excel文件 2.编写模板HTML <div class"panel panel-default"><!-- Default panel contents --><div class…

Embedding Watermarks into Deep Neural Networks

将水印嵌入深度神经网络 ABSTRACT 最近在深度神经网络领域取得了显著的进展。分享深度神经网络的训练模型对于这些系统的快速研究课并发进展至关重要。与此同时&#xff0c;保护共享训练模型的权利也变得十分必要。为此我们提议使用数字水印技术来保护知识产权&#xff0c;并…

vue3-模板引用

//1.调用ref函数 -> ref对象 const h1Ref ref(null) const comRef ref(null) //组件挂载完毕之后才能获取 onMounted(()>{console.log(h1Ref.value);console.log(comRef.value); })<div class"father"><!-- 通过ref标识绑定ref对象 --><h2 re…

【angular教程240111】08异步数据流编程与angular :promise,Rxjs6.x

【angular教程240111】08异步数据流编程与angular &#xff1a;promise&#xff0c;Rxjs6.x 目录标题 一级目录二级目录三级目录 〇、编程里的异步1异步编程常见的几种方法2 代码示例其中的一些方法&#xff1a;1. 回调函数&#xff08;Callback Functions&#xff09;2. 事件监…

【工具栏】SequenceDiagram插件的使用(根据代码生成时序图)

1. 安装 2.使用 进入代码页面&#xff0c;点击鼠标右键 选择方法 根据方法中的代码生成时序图

2024年【山东省安全员C证】考试及山东省安全员C证复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员C证考试是安全生产模拟考试一点通总题库中生成的一套山东省安全员C证复审考试&#xff0c;安全生产模拟考试一点通上山东省安全员C证作业手机同步练习。2024年【山东省安全员C证】考试及山东省安全员C证复…

docker部署私人云盘

目录 1.安装 2.登陆 1.安装 mkdir -p /opt/alist docker run -d --restartalways -v /opt/alist:/opt/alist/data -p 5244:5244 --name"alist" xhofe/alist:latest 2.登陆 ip:5224 默认账户admin 密码在日志中

test-04-test case generate 测试用例生成 tcases 快速开始

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 自动生成测试用例 入门指南 关于…

nodemon使用

为什么要使用 nodemon 在编写调试 Node.js 项目的时候&#xff0c;如果修改了项目的代码&#xff0c;则需要频繁的手动 close 掉&#xff0c;然后再重新启动&#xff0c;非常繁琐。 现在&#xff0c;我们可以使用 nodemon&#xff08;https://www.npmjs.com/package/nodemon&a…

js中关于字符串的创建和判断类型

文章目录 创建方法判断类型的技巧区分1、typeof2、instanceof 共点1、Object.prototype.toString.call2、库函数 参考链接&#xff1a;JS字符串的创建和常用方法 如何判断JS中一个变量是 string 类型 创建方法 字符串有着两种的创建方法&#xff0c;一个是使用构造函数&#x…

openssl3.2 - 官方demo学习 - server-arg.c

文章目录 openssl3.2 - 官方demo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方demo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…

力扣452. 用最少数量的箭引爆气球

排序 贪心 思路&#xff1a; 将数组元素按照右边界进行排序&#xff1b;第一支箭从第一个气球的右边界 pos 射出&#xff0c;如果下一个气球的左边界比 pos 要大&#xff0c;则这个气球不会被这支箭射中&#xff0c;否则会被射中&#xff08;因为排过序 pos ∈ [left, right]…

HCIA-Datacom题库(自己整理分类的)_09_Telnet协议【14道题】

一、单选 1.某公司网络管理员希望能够远程管理分支机构的网络设备&#xff0c;则下面哪个协议会被用到&#xff1f; RSTP CIDR Telnet VLSM 2.以下哪种远程登录方式最安全&#xff1f; Telnet Stelnet v100 Stelnet v2 Stelnet v1 解析&#xff1a; Telnet 明文传输…

中职组安全-win20230217-环境-解析

*任务说明&#xff1a; 仅能获取win20230217的IP地址 用户名&#xff1a;test&#xff0c;密码&#xff1a;123456 访问服务器主机,找到主机中管理员名称,将管理员名称作为Flag值提交&#xff1b; john 访问服务器主机,找到主机中补丁信息,将补丁编号作为Flag值提交&#xff…