Leetcode3006. 找出数组中的美丽下标 I

news2025/1/12 4:57:02

Every day a Leetcode

题目来源:3006. 找出数组中的美丽下标 I

解法1:暴力

用 C++ 标准库中的字符串查找函数,找到 a 和 b 分别在 s 中的起始下标,将符合要求的下标插入答案。

代码:

/*
 * @lc app=leetcode.cn id=3006 lang=cpp
 *
 * [3006] 找出数组中的美丽下标 I
 */

// @lc code=start
class Solution
{
public:
    vector<int> beautifulIndices(string s, string a, string b, int k)
    {
        // 特判
        if (s.empty() || a.empty() || b.empty() || k <= 0 || k > s.size())
            return {};
        if (s.length() < a.length() || s.length() < b.length())
            return {};

        int slen = s.size(), alen = a.size(), blen = b.size();
        vector<int> indices;
        int pos_a = s.find(a, 0), pos_b = s.find(b, 0);
        while (pos_a != string::npos && pos_b != string::npos)
        {
            while (pos_b != string::npos && pos_a - pos_b > k)
                pos_b = s.find(b, pos_b + 1);
            if (pos_b != string::npos && abs(pos_a - pos_b) <= k)
                indices.push_back(pos_a);
            pos_a = s.find(a, pos_a + 1);
        }
        
        return indices;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(slen * alen * blen),其中 slen 是字符串 s 的长度,alen 是字符串 a 的长度,blen 是字符串 b 的长度。

空间复杂度:O(1)。

解法2:暴力

暴力匹配,但是注意减小 j 的取值范围,并且取到答案后立即 break,否则会有重复。

代码:

/*
 * @lc app=leetcode.cn id=3006 lang=cpp
 *
 * [3006] 找出数组中的美丽下标 I
 */

// @lc code=start
class Solution
{
public:
    vector<int> beautifulIndices(string s, string a, string b, int k)
    {
        // 特判
        if (s.empty() || a.empty() || b.empty() || k <= 0 || k > s.size())
            return {};
        if (s.length() < a.length() || s.length() < b.length())
            return {};

        int slen = s.size(), alen = a.size(), blen = b.size();
        vector<int> indices;
        for (int i = 0; i <= slen - alen; i++)
        {
            if (s.substr(i, alen) == a)
            {
                // 注意减小 j 的取值范围
                int start = max(0, i - k), end = min(slen, i + k);
                for (int j = start; j <= end; j++)
                    if (s.substr(j, blen) == b)
                    {
                        indices.push_back(i);
                        break;
                    }
            }
        }
        return indices;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(slen * alen * blen),其中 slen 是字符串 s 的长度,alen 是字符串 a 的长度,blen 是字符串 b 的长度。

空间复杂度:O(1)。

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

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

相关文章

云盘后端分析

1.验证码 用的是外面找的 2.发送邮箱验证码 配置邮箱的授权码 我们在发送邮箱的时候&#xff0c;需要把那个值传到数据库中&#xff0c;数据库中有它的状态&#xff0c;我们需要根据状态判断它是注册还是找回密码 我们在发送邮箱之前&#xff0c;先从session里面得到我们验证…

选择排序(二)——堆排序(性能)与直接选择排序

目录 一.前言 二.选择排序 2.1 堆排序 2.2选择排序 2.2.1 基本思想 2.2.2直接选择排序 三.结语 一.前言 本文给大家带来的是选择排序&#xff0c;其中选择排序中的堆排序在之前我们已经有过详解所以本次主要是对比排序性能&#xff0c;感兴趣的友友可移步观看堆排&#…

GPTs Store 推荐的学术类应用,效果怎么样?

&#xff08;注&#xff1a;本文为小报童精选文章&#xff0c;已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 哪些 GPTs &#xff0c;会令我们眼前一亮&#xff1f; 最近 GPTs Store 已经正式发布&#xff0c;提供了推荐应用和各分类板块目前的热门趋势…

LTC2944库仑计(电量计)芯片应用笔记(Arduino,ESP32)

一、一些基础知识 1.蓄电池的容量单位 &#xff08;1&#xff09;毫安时mAH 蓄电池的容量一般会采用毫安时&#xff08;mAH&#xff09;为单位&#xff0c;比如2000mAH的蓄电池意思是该蓄电池理论上可以以2000mA的电流持续放电1小时&#xff0c;2000mA*1H2000mAH。当然这个是…

STM32CubeMX配置定时器输入捕获功能

STM32CubeMX配置定时器输入捕获功能 0.前言一、方法简介二、STM32CubeMX配置1.生成PWM信号2.配置TIM3_CH1进行采样3.占空比计算 三、总结 参考文章&#xff1a;CubeMX系列教程——11 定时器输入捕获 0.前言 最近在学习江科大STM32教程的原理部分时&#xff0c;发现该教程中使用…

1 - 搭建Redis数据库服务器|LNP+Redis

搭建Redis数据库服务器&#xff5c;LNPRedis 搭建Redis数据库服务器相关概念Redis介绍安装RedisRedis服务常用管理命令命令set 、 mset 、 get 、 mget命令keys 、 type 、 exists 、 del命令ttl 、 expire 、 move 、 flushdb 、flushall 、save、shutdown 配置文件解析 LNP …

AlmaLinux 9.3 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

深度学习记录--Momentum gradient descent

Momentum gradient descent 正常的梯度下降无法使用更大的学习率&#xff0c;因为学习率过大可能导致偏离函数范围&#xff0c;这种上下波动导致学习率无法得到提高&#xff0c;速度因此减慢(下图蓝色曲线) 为了减小波动&#xff0c;同时加快速率&#xff0c;可以使用momentum…

R语言学习case5:NC基于R语言的UpSetR

step1: 安装库 install.packages("UpSetR")step2:导入包 library(UpSetR)step3&#xff1a;读取数据 otu_RA <- read.delim(./otu_RA.txt, header TRUE, row.names 1, sep \t)read.delim(): 这是R语言中的一个函数&#xff0c;用于读取文本文件&#xff0c;…

国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络

国产操作系统&#xff1a;VirtualBox安装openKylin-1.0.1虚拟机并配置网络 openKylin 操作系统目前适配支持X86、ARM、RISC-V三个架构的个人电脑、平板电脑及教育开发板&#xff0c;可以满足绝大多数个人用户及开发者的使用需求。适用于在VirtualBox平台上安装openKylin-1.0.1…

Matlab/simulink风储调频,多台飞轮储能调频,风电场调频,飞轮储能带有虚拟惯量和下垂控制,三机九节点系统一次调频,离散模型

上述为不同飞轮储能容量配比&#xff0c;风电场容量配比&#xff0c;以及有无附加频率控制的飞轮储能出力分析。 飞轮储能驱动电机为永磁同步机电机PMSG 有无飞轮储能容量较小&#xff0c;所以对频率的改善效果有限&#xff0c;不过可以继续增大容量&#xff0c;从而增大频率的…

git clone超时

本文介绍作者在Centos上链接github超时&#xff0c;无法克隆的解决方案 在出现上图所示问题时&#xff0c;有可能是连接不到github.com&#xff0c;读者可以尝试输入ping github.com&#xff0c;当输入该指令后若长时间没有反应说明可能由于本地DNS无法解析导致的。 解决方案…

力扣hot100 反转链表 指针 递归 一题多解

Problem: 206. 反转链表 文章目录 思路&#x1f496; 迭代 双指针&#x1f496; 递归 思路 &#x1f468;‍&#x1f3eb; 大佬题解 &#x1f496; 迭代 双指针 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) /*** Definition for …

[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

机械设计-哈工大课程学习-螺纹连接

圆柱螺纹主要几何参数螺纹参数 ①外径&#xff08;大径&#xff09;&#xff0c;与外螺纹牙顶或内螺纹牙底相重合的假想圆柱体直径。螺纹的公称直径即大径。 ②内径&#xff08;小径&#xff09;&#xff0c;与外螺纹牙底或内螺纹牙顶相重合的假想圆柱体直径。 ③中径&#xff…

弹性调度助力企业灵活应对业务变化,高效管理云上资源

作者&#xff1a;吴昆 什么是弹性调度 云计算时代&#xff0c;企业可以通过云平台获得大量计算资源&#xff0c;并根据业务发展和流量需求的实时变化&#xff0c;灵活调整使用的资源类型与资源量。阿里云提供了多种弹性资源&#xff0c;如云服务器 ECS 和弹性容器实例 ECI&am…

MySQL的一些综合运用

一些基本的语句&#xff1a; USE dept_emp; CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); -- 添加主键 ALTER TABLE dept ADD PRIMARY KEY (deptno); -- 添加数据 INSE…

[学习笔记]刘知远团队大模型技术与交叉应用L4-Prompt-learning Delta-learning

Prompt-Learning and Delta-Tunning 背景和概览 但是从T5开始&#xff0c;大模型越来越大了。 微调很难了。 模型的趋势 Model Scaling&#xff1a;模型越来越大 Difficult Tuning&#xff1a;微调越来越难 Prompt-Learning 基本组成与流程介绍 预训练和fine-tuning有一…

终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

前言 最近在开发Flutter项目&#xff0c;运行ios环境的时候报错没有CocoaPods&#xff0c;安卓环境可以正常运行&#xff0c;当时一脸懵逼&#xff0c;网上搜索了一下&#xff0c;有给我讲原理的&#xff0c;还有让我安装这插件那插件的&#xff0c;最终把电脑搞得卡死&#x…

【机器学习300问】15、什么是逻辑回归模型?

一、逻辑回归模型是为了解决什么问题&#xff1f; 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广义线性回归分析模型&#xff0c;尤其适用于解决二分类问题&#xff08;输出为两个类别&#xff09;。 &#xff08;1&#xff09;二分类举例 邮件过滤&#xff…