豆包大模型 MarsCode AI 刷题专栏 004

007.创意标题匹配问题

难度:易

问题描述

在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 bidword 对创意中的通配符(通配符是用成对 {} 括起来的字符串,可以包含 0 个或者多个字符)进行替换,用来提升广告投放体验。例如:“{末日血战} 上线送 SSR 英雄,三天集齐无敌阵容!”,会被替换成“帝国时代游戏下载上线送 SSR 英雄,三天集齐无敌阵容!”。给定一个含有通配符的创意和n个标题,判断这句标题是否从该创意替换生成的。


测试样例

样例1:

输入:n = 4, template = "ad{xyz}cdc{y}f{x}e", titles = ["adcdcefdfeffe", "adcdcefdfeff", "dcdcefdfeffe", "adcdcfe"]
输出:"True,False,False,True"

样例2:

输入:n = 3, template = "a{bdc}efg", titles = ["abcdefg", "abefg", "efg"]
输出:"True,True,False"

样例3:

输入:n = 5, template = "{abc}xyz{def}", titles = ["xyzdef", "abcdef", "abxyzdef", "xyz", "abxyz"]
输出:"True,False,True,True,True"

解题思路

  1. 解析模板:首先,我们需要解析模板字符串,找出所有的通配符及其位置。
  2. 匹配标题:对于每个标题,我们需要检查它是否可以通过替换模板中的通配符生成。
  3. 动态匹配:使用双指针技术,一个指针遍历模板,另一个指针遍历标题,尝试匹配模板中的固定部分和通配符部分。

复杂度分析

  • 时间复杂度

    • 提取模板的前缀和后缀的时间复杂度为 O(n),其中 n 是模板的长度。
    • 使用正则表达式提取非通配符部分的时间复杂度为 O(n)。
    • 对于每个标题,检查其是否符合模板的时间复杂度为 O(m),其中 m 是标题的长度。
    • 因此,总的时间复杂度为 O(n+m⋅k),其中 k 是标题的数量。
  • 空间复杂度

    • 存储模板的前缀、后缀和非通配符部分的空间复杂度为 O(n)。
    • 因此,总的空间复杂度为 O(n)。

知识点扩展

  • 正则表达式

    • 正则表达式是一种强大的字符串匹配工具,可以用来提取、替换和验证字符串中的模式。在本题中,我们使用正则表达式提取模板中的非通配符部分。
  • 字符串处理

    • 字符串处理是算法题中常见的操作,包括字符串的拼接、分割、查找和替换等。在本题中,我们需要处理模板和标题的字符串,提取前缀、后缀和非通配符部分,并进行匹配。
  • 双指针技巧

    • 双指针技巧常用于字符串和数组的处理,可以有效地减少时间复杂度。在本题中,我们使用双指针技巧来提取模板的前缀和后缀。

代码提示

def solution(n, template_, titles):
    # 解析模板,找出所有的通配符及其位置
    import re
    pattern = re.compile(r'\{.*?\}')
    matches = list(pattern.finditer(template_))
    
    # 定义一个函数来检查某个标题是否匹配模板
    def is_match(title):
        # 使用双指针技术进行匹配
        t_index = 0  # 模板指针
        ti_index = 0  # 标题指针
        
        for match in matches:
            # 匹配模板中的固定部分
            fixed_part = template_[t_index:match.start()]
            if title[ti_index:ti_index + len(fixed_part)] != fixed_part:
                return False
            ti_index += len(fixed_part)
            t_index = match.end()
            
            # 匹配通配符部分
            wildcard_start = match.start()
            wildcard_end = match.end()
            wildcard_content = template_[wildcard_start + 1:wildcard_end - 1]
            
            # 找到标题中对应通配符的部分
            if wildcard_content:
                # 如果通配符内容不为空,尝试匹配
                wildcard_match = re.search(wildcard_content, title[ti_index:])
                if not wildcard_match:
                    return False
                ti_index += wildcard_match.end()
            else:
                # 如果通配符内容为空,直接跳过
                pass
        
        # 匹配模板剩余部分
        if title[ti_index:] != template_[t_index:]:
            return False
        
        return True
    
    # 对每个标题进行匹配检查
    results = []
    for title in titles:
        results.append(is_match(title))
    
    # 将结果转换为字符串
    return ','.join(map(str, results))

if __name__ == "__main__":
    # 你可以添加更多测试用例
    testTitles1 = ["adcdcefdfeffe", "adcdcefdfeff", "dcdcefdfeffe", "adcdcfe"]
    testTitles2 = ["CLSomGhcQNvFuzENTAMLCqxBdj", "CLSomNvFuXTASzENTAMLCqxBdj", "CLSomFuXTASzExBdj", "CLSoQNvFuMLCqxBdj", "SovFuXTASzENTAMLCq", "mGhcQNvFuXTASzENTAMLCqx"]
    testTitles3 = ["abcdefg", "abefg", "efg"]

    print(solution(4, "ad{xyz}cdc{y}f{x}e", testTitles1) == "True,False,False,True" )
    print(solution(6, "{xxx}h{cQ}N{vF}u{XTA}S{NTA}MLCq{yyy}", testTitles2) == "False,False,False,False,False,True" )
    print(solution(3, "a{bdc}efg", testTitles3) == "True,True,False" )

008.找出整型数组中占比超过一半的数

难度:易

问题描述

小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。


测试样例

样例1:

输入:array = [1, 3, 8, 2, 3, 1, 3, 3, 3]
输出:3

样例2:

输入:array = [5, 5, 5, 1, 2, 5, 5]
输出:5

样例3:

输入:array = [9, 9, 9, 9, 8, 9, 8, 8]
输出:9

解题思路

  1. 理解问题

    • 题目要求找到数组中出现次数超过一半的数字。
    • 这意味着这个数字的出现次数比其他所有数字的出现次数之和还要多。
  2. 数据结构选择

    • 我们可以使用一个计数器来记录当前候选数字的出现次数。
    • 使用一个变量来存储当前的候选数字。
  3. 算法步骤

    • 初始化一个候选数字 candidate 和计数器 count
    • 遍历数组中的每一个数字:
      • 如果 count 为 0,将当前数字设为 candidate,并将 count 设为 1。
      • 如果当前数字与 candidate 相同,则 count 加 1。
      • 如果当前数字与 candidate 不同,则 count 减 1。
    • 最终,candidate 就是我们要找的数字。

def solution(array):
    # 创建一个字典来记录每个数字的出现次数
    count_dict = {}
    
    # 遍历数组
    for num in array:
        # 更新字典中的计数
        if num in count_dict:
            count_dict[num] += 1
        else:
            count_dict[num] = 1
        
        # 检查当前数字的出现次数是否超过数组长度的一半
        if count_dict[num] > len(array) // 2:
            return num
    
    # 如果没有找到符合条件的数字,返回0(虽然题目保证一定存在这样的数字)
    return 0

if __name__ == "__main__":
    # 添加你的测试用例
    print(solution([1, 3, 8, 2, 3, 1, 3, 3, 3]) == 3)
    print(solution([5, 5, 5, 1, 2, 5, 5]) == 5)
    print(solution([9, 9, 9, 9, 8, 9, 8, 8]) == 9)


来源:https://www.marscode.cn/practice

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Blueprint —— Blueprint Editor(二)

目录 一,Blueprint Header View 二,Blueprint Bookmarks 三,Blueprint Editor Defaults Tab 获取类默认值 一,Blueprint Header View Blueprint Header View 可将虚幻引擎蓝图类和蓝图结构体转换为C代码;在转换过程…

JVM组成面试题及原理

Java Virtual Machine(JVM)是Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收机制 JVM由哪些部分组成,运行流程是什么?…

解决在windows中docker拉取镜像出现的问题

解决在windows中docker拉取镜像出现的问题 docker pull minio/minio 出现报错: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while await…

MySQL基本建表操作

目录 1,创建数据库db_ck 1.1创建表 1.2 查看创建好的表 2,创建表t_hero 2.1 先进入数据库Db_Ck 2.1.1 这里可以看是否进入数据库: 2.2 创建表t_Hero 2.2.1 我们可以先在文本文档里面写好然后粘贴进去,因为直接写的话,错了要重新开始 …

使用Arduino和ESP8266进行基于物联网的垃圾箱监控

使用 Arduino 和 ESP8266 的基于 IOT 的垃圾箱监控系统 在这个 DIY 中,我们将制作一个基于 IOT 的垃圾箱/垃圾监控系统,该系统将通过网络服务器告诉我们垃圾桶是空的还是满的,并且您可以通过互联网从世界任何地方了解“垃圾桶”或“垃圾箱”的状态。它将非常有用,可以安装…

【Academy】HTTP 请求走私 ------ HTTP request smuggling

HTTP 请求走私 ------ HTTP request smuggling 1. 什么是 HTTP 请求走私?2. HTTP 请求走私漏洞是如何产生的?3. 如何执行 HTTP 请求走私攻击3.1 CL.TE 漏洞3.2 TE.CL 漏洞3.3 TE.TE 行为:混淆 TE 标头 4. 如何识别和确认 HTTP 请求走私漏洞4.…

元脑服务器的创新应用:浪潮信息引领AI计算新时代

浪潮信息的元脑 R1 服务器现已全面支持开源框架 SGLang,能够在单机环境下实现 DeepSeek 671B 模型的高并发性能,用户并发访问量超过1000。通过对 SGLang 最新版本的深度适配,元脑 R1 推理服务器在运行高性能模型时,展现出卓越的处…

蓝桥备赛(13)- 链表和 list(下)

一、动态链表 - list (了解) new 和 delete 是非常耗时的操作 在算法比赛中,一般不会使使用 new 和 delete 去模拟实现一个链表。 而且STL 里面的 list 的底层就是动态实现的双向循环链表,增删会涉及 new 和 delete,效率不高,竞赛…

【VUE2】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期:就是…

正则表达式梳理(基于python)

正则表达式(regular expression)是一种针对字符串匹配查找所定义的规则模式,独立于语言,但不同语言在实现上也会存在一些细微差别,下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》

类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit,而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的(符合规定的显示表达式) 注:一般情况下…

使用服务器搭建无门槛ChatGPT WEB应用LobeChat

一、服务器实例配置 ‌实例选型‌ ‌推荐配置‌:‌2核4GB内存‌,保障AI推理和并发访问的流畅性‌67。‌操作系统‌:选择 ‌Ubuntu 22.04 LTS‌,适配Docker环境与LobeChat依赖库‌23。‌安全组规则‌:开放以下端口&…

C/S架构与B/S架构

一、定义与核心区别 C/S架构(Client/Server,客户端/服务器) 客户端需安装专用软件(如QQ、企业ERP系统),直接与服务器通信。服务器端通常包括数据库和业务逻辑处理1。特点:客户端承担部分计算任务…

鸿蒙Next-应用检测、安装以及企业内部商店的实现

一、企业内部应用检测和更新升级 A应用检测是否安装B应用 canOpenApp():boolean{ try { let link schB://com.example.test/open; // 替换成你目标应用的link串儿 let canOpen bundleManager.canOpenLink(link); console.log("canOpen:"canOpen…

车载网络测试-DBC文件解读

目录 1 背景2 DBC结构2.1 Networks2.2 ECUs(Electronic Control Units)2.3 Network Nodes2.4 Message(报文)2.4.1 Message定义、作用、示例2.4.2 报文Attribute(属性)2.4.2.1 常见的报文Attributes2.4.2.2 …

《A++ 敏捷开发》- 18 软件需求

需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。 “是否新方法比以前好?”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…

SQL经典查询

查询不在表里的数据,一张学生表,一张学生的选课表,要求查出没有选课的学生? select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…

大语言模型进化论:从达尔文到AI的启示与展望

文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…

SSM架构 +Nginx+FFmpeg实现rtsp流转hls流,在前端html上实现视频播放

序言: 本文介绍通过SSM架构 NginxFFmpeg实现rtsp流转hls流,在前端html上实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。(海康和大华都可以),我使用的是海康 步骤一:安装软件 FFmpeg…

Hadoop管理页看不到任务的问题

这个yarn分配任务了但是为空 在$HADOOP_HOME/conf/mapred-site.xml 原来的配置文件基础之上添加&#xff1a; <property><name>mapreduce.framework.name</name><value>yarn</value></property> 重启之后就好了